代码如下:
public class Fibonacci {
//递归
public static long f_recursion(int n){
return n<=1? 1 : f_recursion(n-2)+f_recursion(n-1);
}
//非递归
public static long f(int n){
long a=1L,b=1L,result=1L;
if(n<=1)
return result;
else {
for (int i = 2; i <= n; i++) {
result = a + b;
a = b;
b = result;
}
return result;
}
}
public static void main(String args[]){
long start_time,end_time,result;
start_time=System.currentTimeMillis();
result=f_recursion(50);
end_time=System.currentTimeMillis();
System.out.println("递归求斐波那契数列,结果:"+result+"用时:"+(end_time-start_time)/1000+"秒");
start_time=System.currentTimeMillis();
result=f(50);
end_time=System.currentTimeMillis();
System.out.println("非递归求斐波那契数列,结果:"+result+"用时:"+(end_time-start_time)/1000+"秒");
}
}
运行结果:
递归求斐波那契数列,结果:20365011074用时:45秒
非递归求斐波那契数列,结果:20365011074用时:0秒
非递归时间复杂度为o(2^n),效率很低