斐波那契数列

我在本地IDE中写了两种方法实现斐波那契数列,现在进行对比

//递归法:
int Fibonacci(int n)
	{
		if (n == 0)
		{
			return 0;
		}
		else if (n == 1||n == 2)
		{
			return 1;
		}
		return Fibonacci(n - 1) + Fibonacci(n - 2);
	}

假设我们求第5个斐波那契数列 alt 二叉树的节点数=(2^(n-1))-1,因此时间复杂度为O(2^n),递归栈的最大深度为n-1,因此空间复杂度为O(n),在计算中,n=3的时候计算了两次,因此导致递归法的时间复杂度上升。

//非递归法
int Fibonacci2(int n)
	{
		vector<int> res;
		if (n == 0)
		{
			return 0;
		}
		res.push_back(0);
		res.push_back(1);
		for (int i = 2; i <= n; ++i)
		{
			res.push_back(res[i - 1] + res[i - 2]);
		}
		return res.back();
	}

非递归法中程序循环了n-2次,因此时间复杂度为O(n).

Leetcode刷题整合 文章被收录于专栏

都是作者刷到的一些感觉是好题整理到一起的,辛苦整理不易,麻烦给个赞,有疑问请留言

全部评论

相关推荐

双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
09-27 10:54
重庆大学 C++
人已微死:致敬传奇耐测王。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务