fibnacci数列大家都知道,可以非常直观的根据递归式完成代码,为什么能非常直观的呢,因为fibnacci数列的递归式的函数定义很简单,因此啊,我觉得用程序写递归算法最难的就是通过归纳得出递归式。
public static int fibnacc(int n) {
sum ++;
if(n == 0) {
return 0;
} else if(n == 2) {
return 1;
} else if(n > 2) {
return fibnacc(n-1) + fibnacc(n-2);
}
return -1;
}
int i = fibnacc(43);
System.out.println(i);
System.out.println(sum);
从感觉上来看,时间久已经很长了。同时发现上面输出为:
267914296
866988873
说明递归层次太多了,当然也存在重复计算的问题。
由于没有在实际项目中用到过,之前没有感觉,看来还是比较恐怖的。
看来还是稍微多写几行代码吧,用迭代循环吧。
public static int fibnacc2(int n) {
int prevfirst = 1;
int prevseconed = 0;
int fibnacc = 0;
if (n == 1)
return 0;
else if (n == 2) {
return 1;
} else if(n > 2) {
for (int i = 1; i <= n - 2; i++) {
fibnacc = prevfirst + prevseconed;
prevseconed = prevfirst;
prevfirst = fibnacc;
}
return fibnacc;
} else {
return -1;
}
}