题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
有两种算法
递归:
递归中有很多重复的地方,从而对性能带来很大的负担
递归可能引起更大的问题:调用栈溢出
动态规划:
自下而上计算,时间复杂度大O(n)
代码:
int Fibonacci(int n)
{
if (n > 39 || n == 0)
{
return 0;
}
int firstNum = 0;//f(n-2)
int secondNum = 1;//f(n-1)
int finalNum = 0;
int i = 0;
while (i <= n)
{
if (i == 0)
{
finalNum = 0;
i++;
continue;
}
else if (i == 1)
{
finalNum = 1;
i++;
continue;
}
secondNum = firstNum;
firstNum = finalNum;
finalNum = firstNum + secondNum;
i++;
}
return finalNum;
}
还有一个更厉害算法,也是动态规划,但是没太弄明白
int Fibonacci(int n) {
int f = 0, g = 1;
while(n--) {
g += f;
f = g - f;
}
return f;
}