当求第n个斐波那契数列的数时,我们通常会想到用递归发,但考虑实现时间的问题,递归法所耗的时间过久。本篇我将提出两种非传统的解法。
1、使用迭代法:
/*
- 迭代方法
*/
public class Fibo {
public long fibo(long n) {
long preVal = 1;
long prePreVal = 0;
if(n<=2) {
return n;
}
long loop = 1;
long returnVal = 1;
while(loop < n) {
returnVal = preVal + prePreVal;
//更新记录结果
prePreVal = preVal;
preVal = returnVal;
loop++;
}
return returnVal;
}
public static void main(String[] args) {
Fibo test = new Fibo();
System.out.println(test.fibo(50));
}
}
2、尾递归:
/*
- 尾递归
*/
public class Fibo_weidigui {
public long fiboProcess(long n,long prePreVal,long preVal,long begin) {
/如果已经计算到我们所需要计算的,则返回/
if(n==begin) {
return preVal+prePreVal;
}else {
begin++;
return fiboProcess(n,preVal,preVal+prePreVal,begin);
}
}
public long fibo(long n) {
if(n<=1) {
return n;
}else {
return fiboProcess(n,0,1,2);
}
}
public static void main(String[] args) {
Fibo_weidigui test = new Fibo_weidigui();
System.out.println(test.fibo(50));
}
}
尾递归思路其实也很简单,我们要算第n个数,只要知道第n-2和第n-1个数就好了。