题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
思路:看到斐波那契数列就想有用递归的冲动,没错,刚开始我看了就往那个方向去想了,而且递归代码只需要几行就行了,
if
(n<=
1
)
return
n;
else
return
Fibonacci(n-
1
)+Fibonacci(n-
2
);
不要忘了n可以从0开始,而且用递归有一个明显的缺点,时间复杂度很大,有可能产生溢出,所以必须放弃递归,除非实在想不到方法,除了递归还有迭代,
其实用迭代的思想不难,定义第一个数和第二个数,再定义一个target,然后逐步迭代过程中,不断更新这三个数,这样时间复杂度大大降低。
class Solution {
public:
int Fibonacci(int n)
{
int first = 0, second = 1, target;
if (n < 2)
return n;
for (int i = 0; i < n - 1; i++)
{
target = first + second;
first = second;
second = target;
}
return target;
}
};