我的斐波那契数组算法总结

斐波那契算法模板

介绍

斐波那契问题来源于兔子繁殖问题。
兔子繁殖问题:假设小兔子长大需要一年的时间,成年的兔子每年可以生一只小兔子。
问:如果第一年有一只小兔子,那么 n 年后一共有多少只兔子。
{1,1,2,3,5,8,13…}
根据题目就可以找到规律:从第三年开始,往后每年的兔子数 = 去年兔子数 + 前年兔子数
即 f(n) = f(n-1) + f(n-2)

三种解法

第一种:经典求法(递归法):时间复杂度最高:O(2^n)

算法很简单,只需要不断的使用递归(从高到低)就行,但是时间复杂度非常高,不推荐使用。

//每趟返回第 n 年的兔子数 
int f1(int n)
{
	if(n <= 0) return 0;			 
	if(n == 1 || n == 2) return 1;
	return f1(n-1) + f1(n-2);
 } 
第二种:顺序求法(遍历法):时间复杂度中等:O(n)

主要是通过遍历迭代求出第 n 年的值(从低到高)。我个人觉得最好使用这种方法

int f2(int n)
 {
 	if(n <= 0) return 0;
	if(n == 1 || n == 2) return 1;
	int left = 1;
	int right = 1;
	int temp = 0;
	for(int i = 3; i <= n; i++)
	{
		temp = right;
		righe = right + left;	//累加 
		left = temp;			
	 } 
	 return right; 
 }
第三种:状态矩阵相乘求法:时间复杂度最好:O(logn)

呃呃呃。。。我个人觉得虽然时间复杂度最好,但是代码量有点多,不值得在竞赛中使用。所以就没有研究。可以参考这篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值