基础算法:递推思想

说到递推算法,我们最能够想到的当属斐波那契数列了,今天,我们就以它为例子,来介绍一下递推思想吧。(以下故事纯属胡扯,请不要相信当真。

相传从前在一个快乐世界有两只可爱的小兔子,还有一个养兔人叫斐波那契,两只小兔子每天快快乐乐的蹦跳在快乐星球上,一蹦就是几千年。

原来,在快乐星球上,只要你快乐,就不会死!

于是,养兔人和两只可爱兔子快乐的生活在快乐星球上。

直到有一天,斐波那契一觉醒来,发现多了蹦跳快乐的两只小兔子时,他惊呆了。

此后,他发现,刚生下来的小兔子下个月就会长大,下下个月就会开始每个月生两只小兔子。

为了防止快乐星球超载,斐波那契研发出了不快乐试剂,同时,他需要记录兔子的数量,如果超载了,他就要消灭一部分快乐兔子。

于是,不记录还好,一记录吓一跳,他发现(只记录生的,因为最开始两只兔子有感情了,不舍得杀:

12345678910
小兔子101123581321
大兔子0112358132134
兔子总数11235813213455

斐波那契他惊讶的发现,兔子总数居然是前两个月总数的和,于是,这个发现我就成为斐波那契数列。

而其中用到的思想,我们称为递推思想(Ysum为每个月兔子的总数:

Ysum[n]=Ysum[n-1]+Ysum[n-2];

由此可见,递推思想就是当前面我们求出的值后后面有影响、关联、规律且我们知道最开始的值为多少时,我们就可以采取递推思想。

下面是递推思想(斐波那契数列)的代码:

#include<iostream>
using namespace std;

int Ysum[110];


int main()
{
	Ysum[1]=1;
	Ysum[2]=2;
	for(int i=3;i<=100;i++)
	{
		Ysum[i]=Ysum[i-1]+Ysum[i-2];
	}
	for(int i=1;i<=10;i++)
	{
		cout<<Ysum[i]<<" ";
	}
	
	return 0;
} 

另一种:

#include<iostream>
using namespace std;

int dt(int Y)//想要求第几月的总数 
{
	if(Y==1)return 1;//已知一月总数为1 
	if(Y==2)return 1;//已知2月总数为1 
	return dt(Y-1)+dt(Y-2);//返回值为前两个月的总数 
}


int main()
{
	for(int i=1;i<=10;i++)
	{
		cout<<dt(i)<<" ";
	}
	
	return 0;
} 

这里可能有对子函数的运用不是很清晰的,这里用一个图来方便大家理解:

09bdecaaf3024a3d96017bf8361606dd.png
 

 dt子函数会进行如图所示的操作知道找到Y为1或2时返回值1然后返回上一部操作。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值