斐波那契数列是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
用递归的方法实现,比较符合数学公式,但效率会随n的增加而明显降低
public static int fabonacciInRecursion(int i){
if(i == 0) return 0;
if(i == 1 || i == 2) return 1;
return fabonacciInRecursion(i-1) + fabonacciInRecursion(i-2);
}
用非递归的话,效率会高很多,同时要注意的是int的范围,当n>47时,就超出了int的范围,我们可以用java的BigDecimal去改写这个方法。
public static int fabonacciInNonRecursion(int n) {
if(n ==0) return 0;
if(n == 1 || n==2)return 1;
int num1 = 1;
int sum = 0;
int num2 = 1;
for(int i=2;i<n;i++) {
sum = num1 + num2;
num1 = num2;
num2 = sum;
}
return num2;
}