366. 斐波纳契数列
2018-01-02 22:39
120 查看
问题描述:查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …
样例:
给定 1,返回 0
给定 2,返回 1
给定 10,返回 34
方法一:递归法
用递归的方法,在数字n过大时,会非常耗时,在很多有时间限制的测试中都会超时,因而不建议使用递归的方法解决。
方法二:迭代法
通过使用迭代的方法,很容易解决递归超时的问题,因而当可以使用迭代解决问题时,尽量使用迭代的方法解决问题。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …
样例:
给定 1,返回 0
给定 2,返回 1
给定 10,返回 34
方法一:递归法
class Solution { public: /* * @param n: an integer * @return: an ineger f(n) */ int fibonacci(int n) { // 注意:n代表第n个数字,从1开始计数 if(n == 1){ return 0; } if(n == 2){ return 1; } return fibonacci(n-1) + fibonacci(n - 2); } };
用递归的方法,在数字n过大时,会非常耗时,在很多有时间限制的测试中都会超时,因而不建议使用递归的方法解决。
方法二:迭代法
class Solution { public: /* * @param n: an integer * @return: an ineger f(n) */ int fibonacci(int n) { // 用迭代解决递归超时的问题 if(n == 1){ return 0; } if(n == 2){ return 1; } int a = 0; int b = 1; int result; if( n > 2){ for(int i = 3; i <= n; i++){ result = a + b; a = b; b = result; } } return result; } };
通过使用迭代的方法,很容易解决递归超时的问题,因而当可以使用迭代解决问题时,尽量使用迭代的方法解决问题。
相关文章推荐
- LintCode_366_斐波纳契数列
- LintCode_366_斐波纳契数列
- Lintcode 入门-366斐波纳契数列
- 【LintCode-366】斐波纳契数列 (Java实现)
- 366. 斐波纳契数列
- 【LintCode 入门】366. 斐波纳契数列
- LintCode_366_斐波纳契数列
- LintCode 366. 斐波纳契数列
- 366. 斐波纳契数列
- 斐波纳契数列
- 斐波纳契数列(Fibonacci Sequence),又称黄金分割数列
- nyist-366
- PHP迭代器实现斐波纳契数列的函数
- 数字电视标准综述(1) 分类: 生活百科 2014-06-19 08:38 366人阅读 评论(0) 收藏
- NYOJ 366--D的小L【next_permutation水题】
- 斐波纳契数列
- 斐波纳契数列
- Codeforces Round #366 (Div. 2) A , B , C 模拟 , 思路 ,queue
- Medium 366题 Find Leaves of Binary Tree
- 斐波纳契数列