剑指offer8-Fibonacci数列

可紊 提交于 2019-11-28 15:28:04

一 题目描述

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

 

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!