栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

面试题10-斐波那契数列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题10-斐波那契数列

题目

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。(n<=39)
斐波那契数列公式为:

解题思路

我们以求解f(10)为例类分析递归的求解过程。想求f(10),需要先求得f(9)和f(8)。同样,想求得f(9),需要先求的f(8)和f(7)…我们可以用树形结构来表示这种依赖关系,如下图所示:

我们不难发现在这棵树中有很多节点是重复的,而且重复的结点数会随着n的增加而急剧增加,这意味计算量会随着n的增加而急剧增大。事实上,递归方法计算的时间复杂度是以n的指数的方式递增的。

C++实现(采用递归和循环两种方法的比较)
#include
using namespace std;
//递归
long long Fibonacci(unsigned int n)
{
	if (n <= 0)
		return 0;
	if (n == 1)
		return 1;
	return Fibonacci(n - 1) + Fibonacci(n - 2);
}
//循环
long long Fibonacci1(unsigned n)
{
	int result[2] = { 0,1 };
	if (n < 2)
		return result[n];
	long long fibNMinusOne = 1;
	long long fibNMinusTwo = 0;
	long long fibN = 0;
	for (unsigned int i = 2; i <= n; ++i)
	{
		fibN = fibNMinusOne + fibNMinusTwo;
		fibNMinusTwo = fibNMinusOne;
		fibNMinusOne = fibN;
	}
	return fibN;
}
int main() {
	cout << "3的斐波那契数列是:" << Fibonacci(3) << endl;
	cout << "10的斐波那契数列是:" << Fibonacci(10) << endl;
	cout << "0的斐波那契数列是:" << Fibonacci(0) << endl;
	cout << "1的斐波那契数列是:" << Fibonacci(1) << endl;
	cout << "2的斐波那契数列是:"< 
Python实现 
class Solution:
    def Fibonacci(self,n):
        if n == 0:
            return 0
        elif n == 1:
            return 1
        else:
            fibNMinusOne, fibNMinusTwo, fibN = 1, 0, 0
            for i in range(2,n+1):
                fibN = fibNMinusOne + fibNMinusTwo
                fibNMinusTwo = fibNMinusOne
                fibNMinusOne = fibN
            return fibN

# 测试
if __name__ == "__main__":
    s = Solution()
    res=s.Fibonacci(3)
    print(res)
测试用例
  1. 功能测试(如输入3/5、10等)
  2. 边界值测试(如输入0,、1、2)
  3. 性能测试(输入较大的数字,如40、50、100等)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号