递归方式和循环方式,仅供参考
public class practice {
static long[] f = new long[]{1,1,2};
static int i = 2;
public static void main(String[] args) {
while(true){
int num = new Scanner(System.in).nextInt();
long start1 = System.currentTimeMillis();
System.out.println("斐波那契数列递归方式:第"+num+"位="+f1(num,i));
System.out.println("第"+num+"位所需时间="+(System.currentTimeMillis()-start1)+"毫秒");
System.out.println("========");
long start2 = System.currentTimeMillis();
System.out.println("斐波那契数列循环方式:第"+num+"位="+f2(num));
System.out.println("第"+num+"位所需时间="+(System.currentTimeMillis()-start2)+"毫秒");
f = new long[]{1,1,2};
i = 2;
}
}
public static long f1(int num,int i){
f[i++ % 3] = f[i++ % 3] + f[i-- % 3];
if(i<num) f1(num,i);
return f[(num-1) % 3];
}
public static long f2(int num){
long[] f = new long[]{1,1,2};
for(int i = 2;i < num;) {
f[i++ % 3] = f[i++ % 3] + f[i-- % 3];
}
return f[(num-1) % 3];
}
}
执行结果
15
斐波那契数列递归方式:第15位=610
第15位所需时间=0毫秒
========
斐波那契数列循环方式:第15位=610
第15位所需时间=1毫秒
1000
斐波那契数列递归方式:第1000位=817770325994397771
第1000位所需时间=0毫秒
========
斐波那契数列循环方式:第1000位=817770325994397771
第1000位所需时间=0毫秒