C语言

兔子生崽问题

2019-03-02  本文已影响4人  sure_风雨与晴

假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子?请编程求解该问题。

依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。
综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。


兔子繁殖.png

用fn表示第n个月成兔对数,于是可得递推公式:

(n = 1) f1 = 1
(n = 2) f2 = 1
(n >= 3) fn = fn-1+fn-2

可由上述公式递推出每个月成兔对数为:1,1,2,3,5,8,13,21,34,55,89,144...即Fibonacci数列。

#include <stdio.h>
#include <stdlib.h>
#define N 12

void Fibonacci(int f[], int n);
int main()
{
    int f[N], i;
    Fibonacci(f, N);
    printf("\nTotal = %d\n", f[N-1]);
    return 0;
}

//计算并打印Fibonacci数列的前n项
void Fibonacci(int f[], int n)
{
    int i;
    f[0] = 1;
    f[1] = 2;
    for (i = 2; i < n; i++)
        f[i] = f[i-1] + f[i-2];
    for (i = 0; i < n; i++)
        printf("%4d", f[i]);
}

上一篇 下一篇

猜你喜欢

热点阅读