其实这个斐波那契数列比较简单,但是这里还是要写一下,主要是弄懂递归和递推的区别。以及在一些情况下为什么递归比递推慢。
下面就分别用递归和递推来实现斐波那契数列。
public class demo1 { //这里是递推的方法。 public static int fib(int n) { //int fib[];//数组只是声明一个引用变量,不能直接使用,还要初始化 int fib[]=new int[50];//初始化后可以定义长度 fib[0]=1; fib[1]=1; for(int i=2;i<=n;i++) { fib[i]=fib[i-1]+fib[i-2]; } return fib[n]; } //这里用的是递归 public static int fib1(int n){ if(n<=1) return 1; return fib(n-1)+fib(n-2); } public static void main (String[] args) { int n=3; System.out.print(fib1(n)); System.out.print(fib(n)); } }
下面就讲一讲递推和递推的区别。粘贴一些别处的文段。
区别程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法。递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
下面回到斐波那契数列,这里递归没有递推快的原因我的想法是这样的:可能递推用到了前一次的计算结果,但是递归是倒着来的,没有用到前面的缓存。所以递推一般比递归要快。