剑指offer8-Fibonacci数列

一 题目描述

大家都知道斐波那契数列,现在要求输入一个整数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 };

 

该篇博客为自己学习总结,水平有限,如有错误,欢迎讨论!

上一篇:Poj-3922 A simple stone game(k倍动态减法)


下一篇:python – 使用Fibonacci程序求和偶数元素