裴波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
分析:裴波那契数列:0 1 1 2 3 5…除了前两项其余由递归式得到f(n) = f(n - 1) + f(n - 2)
- 显然写一个简单的递归方法可以实现。
public class Solution {
public int Fibonacci(int n) {
if(n == 0 || n == 1) return n;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
- 但是在测试时上述方法超过了一秒,主要时间花费应该在反复调用方法上,并且数字如果太大也会造成调用栈溢出,那么将此写成循环的形式将会解决这两个问题,只是代码稍微多几行。
public class Solution {
public int Fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
int pre1 = 0;
int pre2 = 1;
int res = 0;
for (int i = 2; i <= n; ++i) {
res = pre1 + pre2;
pre1 = pre2;
pre2 = res;
}
return res;
}
}