斐波那契数列(兔子繁衍问题)

兔子繁衍问题(15 分)

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:
输入在一行中给出一个不超过10000的正整数N。

输出格式:
在一行中输出兔子总数达到N最少需要的月数。

输入样例:
30
输出样例:
9

其实去列一下前面几个月兔子的数量就会发现,从第三个月开始,下一个月兔子的总数就为上两个月兔子总数的和。其实这个数列是一个金典算法题。而这种数列称为斐波那契数列。
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>2,n∈N*)。这个数列从第3项开始,每一项都等于前两项之和。

非递归C++代码实现如下:

#include<iostream>
using namespace std;

int main(void)
{
    int n, sum, cnt, v1, v2;
    sum = cnt = 1; //cnt表示过了几个月,sum为兔子总数 
    v1 = v2 = 0;
    cin >> n;
    if(n > 1) { //n至少是大于等于2的数,若为1,则直接输出cnt,即1 
        while(sum < n) { 
            v1 = v2; 
            v2 = sum;
            sum += v1;
            cnt ++;
        }
    }
    cout << cnt << endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41799219/article/details/79996724