下午在完成java作业时,碰到了一个非常熟悉的题,求解斐波那契数列项,不过与以前不同的是要求求解的数据是第100项,我想想100也不太大嘛,就用普通的想法做了,也就是下面的code:
int fib(int n){
if (1 == n || 2 == n)
return 1;
else
return fib(n-1)+fib(n-2);
}
顺利的编译运行,结果跑了20分钟没见结果。。。。 擦了 这么等下去不是办法 啊 转念想用循环代替递归 发现提干上明确指出要递归 。。。。。。。。。。。。。。。。。。。。。。。。绝路了
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
终于,又搞出了另一种递归,用参数记录中间值的方法来递归 降低问题的复杂度到O(n), 也就是下面的代码
public static long Fib(int n,long last,long cur, int count)
//n表示要求解的位数,last表示前一个数,cur表示当前数,count记录递归次数
{
if(count == n)
{
return cur;
}
else
{
return Fib(n,cur,last+cur,count+1);
}
}
编译运行,刷的一下结果就出来啦
:1298777728820984005