【题目分析】:求斐波那契数列第n项,n<=39;
思路上来就怼了递归。然后GG,明显内存超了。然后用循环和动态规划。
直接递归直接GG
class Solution {
public:
int Fibonacci(int n) {
if(n<=2)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
};
额,测试用例有0
class Solution {
public:
int Fibonacci(int n) {
if(n<=0) return 0;//为什么加了这句就能过?不加就会溢出
if(n==1 || n==2) return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
};
动态规划很优雅
class Solution {
public:
int Fibonacci(int n) {
int f = 0, g = 1;
while(n--&&n>=0) {
g += f;
f = g - f;
}
return f;
}
};
循环没有问题
class Solution {
public:
int Fibonacci(int n) {
if(n==0)return 0;
if(n==1) return 1;
int a=0,b=1;
int ret;
for(int i=2;i<=n;++i)
{
ret=a+b;
a=b;
b=ret;
}
return ret;
}
};