*此次算法练习主要使用了递推的思想,递推算法是不断利用已有的信息推出新的东西的一种思想,一般递推算法有俩种:
1.顺推法:从已知条件出发,逐步推算出要解决问题的方法。
2.逆推法:从已知的结果出发,用迭代表达式逐步推算出问题的条件。*
斐波那契数列
- 问题描述:
一般而言,兔子在出生俩个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁衍多少只兔子? 问题分析:
第一个月:有一对兔子(1对)
第二个月:兔子成熟后生下一对兔子(2对)
第三个月:第一对又生下一对兔子(3对)
第四个月:……
我们可以用形如“【兔子数】(【生育能力标记{0,0.5,1}】)”的方式进行表示,每一组表示间用‘;’隔开,且每一组表示一个月:
0代表不能生育;
0.5代表差一个月可以生育;
1代表可以生育。
1(0.5);2(1,0);3(1,0.5,0);5(1,1,0.5,0,0);8(1,1,1,0.5,0.5,0,0,0)……
我们采用顺序递推的方法根据已知的条件推断出如下规律:
兔子从第三个月开始,后一个的数量是前俩个月数量的和。代码实现
// 2017_8_2_Fei.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
/**
*一般而言,兔子在出生俩个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。
*如果所有兔子都不死,那么一年以后可以繁衍多少只兔子?
*
*经过分析,我们发现兔子增长的规律是从第三个月开始的
*/
int _tmain(int argc, _TCHAR* argv[])
{
int num=0;//记录兔子的总数,初始有俩只
int begin = 1;//开始有一对兔子
int end = 2;//记录一个月后的兔子数
//循环一年月数
for(int month=1;month<13;month++){
if(month<3)
{
printf("第%d个月的兔子数为%d:\n",month,month);
}else{
num=begin+end;
begin=end;
end=num;
printf("第%d个月的兔子数为%d:\n",month,num);
}
}
return 0;
}