一 题目描述
大家都知道斐波那契数列,现在要求输入一个整数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 };
该篇博客为自己学习总结,水平有限,如有错误,欢迎讨论!