1.递归
public class Solution {
public int Fibonacci(int n) {
if(n<=1)
return n;
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
当n越大时,耗时越长,因为有大量冗余操作
举个栗子:
n=4:
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
可以看到n=4的情况下Fibonacci(1)重复计算次数就已经高达3次
2.迭代
空间代价换取时间
public class Solution {
public int Fibonacci(int n) {
if(n<=1)
return n;
int a0=0,a1=1,a=1;
for(int i=1;i<n;i++){
a=a0+a1;
a0=a1;
a1=a;
}
return a;
}
}
3.动态规划
时间空间上性能都比较好
class Solution {
public:
int Fibonacci(int n) {
int f = 0, g = 1;
while(n--) {
g += f;
f = g - f;
}
return f;
}
};