c语言编程一对新出生的兔子,C语言兔子生兔子的问题(3中解法)

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

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

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

【代码一】使用迭代:

#include

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

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

void main()

{

int a[100] ,i,n;

printf("请输入月数:");

scanf("%d",&n);

a[0]=a[1]=1;

for(i=2;i

a[i]=a[i-1]+a[i-2];

printf("第%d个月的兔子为:%d\n", n, a[n-1]);

}

运行结果:

请输入月数:10

第10个月的兔子为:55

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值