一 题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
二 解法1
1 分析
Fibonacci数列用数学语言描述可以表示为f(n) = f(n-1) + f(n-2), (n > 1); f(n) = n, (n = 0, 1);显然可以使用递归思想解决这个问题,递归公式与递归终止条件都有了。
复杂度:时间复杂度O(n^2),空间复杂度O(1)。
2 代码实现
1 class Solution {
2 public:
3 int Fibonacci(int n) {
4 if (n <= 0)
5 return 0;
6 if (n == 1)
7 return 1;
8
9 return Fibonacci(n - 1) + Fibonacci(n - 2);
10 }
11 };
二 解法2
1 分析
用迭代代替递归,f(n) = f(n-1) + f(n-2),要计算f(n)就先计算f(n-1)、f(n-2),反过来想,只要知道f(1)、f(2),那么最终也可以知道f(n)。
复杂度:时间复杂度O(n),空间复杂度O(1)。
2 代码实现
1 class Solution {
2 public:
3 int Fibonacci(int n) {
4 if (n <= 0)
5 return 0;
6 if (n == 1)
7 return 1;
8
9 int lastValue = 1; //f(n-1)的值
10 int lastLastValue = 0; //f(n-2)的值
11 int ret; //返回值
12 for (int i = 2; i <= n; ++i)
13 {
14 ret = lastValue + lastLastValue;
15 lastLastValue = lastValue;
16 lastValue = ret;
17 }
18
19 return ret;
20 }
21 };
该篇博客为自己学习总结,水平有限,如有错误,欢迎讨论!