算法练习——”递推之斐波那契“

来源:互联网 发布:国内域名后缀 编辑:程序博客网 时间:2024/05/21 14:45

  *此次算法练习主要使用了递推的思想,递推算法是不断利用已有的信息推出新的东西的一种思想,一般递推算法有俩种:
1.顺推法:从已知条件出发,逐步推算出要解决问题的方法。
2.逆推法:从已知的结果出发,用迭代表达式逐步推算出问题的条件。*


斐波那契数列

  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)……
    我们采用顺序递推的方法根据已知的条件推断出如下规律:
    兔子从第三个月开始,后一个的数量是前俩个月数量的和。

  3. 代码实现

// 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;}

这里写图片描述

阅读全文
1 0
原创粉丝点击