2025年4月7日 星期一 乙巳(蛇)年 正月初八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言兔子生兔子的问题(3种解法)

时间:12-29来源:作者:点击数:97

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

兔子的规律为数列:1, 1, 2, 3, 5, 8, 13, 21 ....

下面使用了迭代、递归和数组三种解法。

【代码一】使用迭代:

  • #include <stdio.h>
  • int main()
  • {
  • long f1=1, f2=1; // 兔子的数量
  • int i; // 循环次数
  • int n; // 要计算的月份
  • printf("输入要计算的月数:");
  • scanf("%d", &n);
  • // 计算出循环次数
  • if(n%2==1){
  • n = (n+1)/2;
  • }else{
  • n = n/2;
  • }
  • for(i=1;i<=n;i++){
  • printf("第%d个月有%d只\n", i*2-1, f1);
  • printf("第%d个月有%d只\n", i*2, f2);
  • f1=f1+f2; /*前两个月加起来赋值给第三个月*/
  • f2=f1+f2; /*前两个月加起来赋值给第三个月*/
  • }
  • return 0;
  • }

运行结果:

运行结果:
输入要计算的月数:10
第1个月有1只
第2个月有1只
第3个月有2只
第4个月有3只
第5个月有5只
第6个月有8只
第7个月有13只
第8个月有21只
第9个月有34只
第10个月有55只

【方法二】使用递归:

  • #include<stdio.h>
  • int Feibonacci(int n){
  • if(n==1||n==2)
  • return 1;
  • else
  • return Feibonacci(n-1)+Feibonacci(n-2);
  • }
  • int main(){
  • int n; // 要计算的月份
  • printf("输入要计算的月数:");
  • scanf("%d", &n);
  • printf("%d个月的兔子总数为%d\n", n, Feibonacci(n));
  • return 0;
  • }

运行结果:

输入要计算的月数:10
10个月的兔子总数为55

递归看上去非常符合逻辑,但是这种递归效率是非常慢的,不信你计算20, 30, 40 个月的兔子数试试,明显比另外两种方法慢多了,具体分析请看:C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

【代码三】使用数组:

  • #include<stdio.h>
  • void main()
  • {
  • int a[100] ,i,n;
  • printf("请输入月数:");
  • scanf("%d",&n);
  • a[0]=a[1]=1;
  • for(i=2;i<n;i++)
  • a[i]=a[i-1]+a[i-2];
  • printf("第%d个月的兔子为:%d\n", n, a[n-1]);
  • }

运行结果:

请输入月数:10
第10个月的兔子为:55
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门