*此次算法练习主要使用了递推的思想,递推算法是不断利用已有的信息推出新的东西的一种思想,一般递推算法有俩种: 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; }