背景介绍:
如果面试没有其他要求,一般建议用递归方法,因为其代码相对简洁,但如果要求算法必须考虑效率,则改用循环方法,因为递归一方面由于函数调用自身耗费时间和空间性能,另一方面导致重复计算,甚至运算中可能超出栈容量,导致栈溢出。
public class Demo9 {
public int fibRecursive(int n){
if(n<=0)
{
return 0;
}
if(n==1)
{
return 1;
}
return fibRecursive(n-1)+fibRecursive(n-2);
}
public int fib(int n){
int result[]=new int[]{1,2};
if(n < 2){
return result[n];
}
int fibOne=0;
int fibTwo=1;
int fibSum=0;
for(int i=2;i<=n;i++)
{
fibSum=fibOne+fibTwo;
fibOne=fibTwo;
fibTwo=fibSum;
//f(2)=1 f(3)=2 f(4)=3 f(5)=5 f(6)=8
}
return fibSum;
}
public static void main(String[] args) throws Exception {
Demo9 demo=new Demo9();
System.out.println(demo.fib(6));
System.out.println(demo.fibRecursive(6));
}
}