C语言刷题随记 —— 疯狂的兔子

在这里插入图片描述

题目

古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

在这里插入图片描述

思路

兔子的规律为数列 1,1,2,3,5,8,13,21… 符合斐波那契数列的变化规则,可以使用循环或者递归解这一题。

题解

① 循环

#include <stdio.h>

int main()
{
    
    
    long f1,f2;
    int i;
    
    f1=f2=1;
    
    for(i=1;i<=20;i++)
    {
    
    
        printf("%12ld %12ld",f1,f2);
        
        if(i%2==0)
        {
    
    
            printf("\n");    //控制输出,每行四个
        }

        f1=f1+f2;   //前两个月加起来赋值给第三个月
        f2=f1+f2;   //前两个月加起来赋值给第三个月
    }
}


② 递归

#include <stdio.h>


long countRabbit(long f)
{
    
    

    if(f==1 || f==2)
    {
    
    
        return 1;
    }
    else
    {
    
    
        return countRabbit(f-1) + countRabbit(f-2);
    }
}

int main()
{
    
    

   int month ;
   int i;

   printf("请输入月份:");
   scanf("%d",&month);

   for(i=1;i<=month;i++)
   {
    
    
       long f = countRabbit(i);

       printf("%12ld",f);

       if(i%4==0)
       {
    
    
           printf("\n");
       }

   }
   return 0;

}

样例输出

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_21484461/article/details/124001268