小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

题目

如果一对两月大的兔子以后每个月都能生一对小兔子,而一对新生的兔子出生两个月后才可以生小兔子。也就是说,1月份出生,3月份才可以产仔。那么假定一年内没有产生兔子死亡事件,那么一年后共有多少对兔子?

分析

我们先来分析一下兔子产仔问题,逐月来看每月的兔子数量:

第一个月: 1对
第二个月: 1对
第三个月: 2对
第四个月: 3对
第五个月: 5对

从上面可以看出,从第三个月开始,每个月的兔子总对数,等于前两个月兔子对数的总和。

显然的斐波那契数列,也是递推法的典型问题。

第n个月兔子总量: Fn=Fn2+Fn1
这里,初始第一个兔子F1=1, 第二个月兔子F2=1

代码

#include <iostream>
#include <cstdlib>

using namespace std;

int Fibonacci(int n)
{
    if (n == 1 || n == 2)
        return 1;
    else
        return Fibonacci(n - 1) + Fibonacci(n - 2);
}

int main()
{
    cout << "递推法求兔子产仔问题,请输入月份:" << endl;
    int n;
    while (cin >> n)
    {
        cout << n << "月后,兔子有:" << Fibonacci(n) << "对。" << endl;
    }

    system("pause");
    return 0;
}

GitHub源码下载

posted on 2015-09-08 17:19  Coding菌  阅读(284)  评论(0编辑  收藏  举报