当前位置:首页 » 编程语言 » c语言递归求兔子生兔子
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言递归求兔子生兔子

发布时间: 2022-08-18 09:18:32

c语言递归的方法:有一对兔子,从出生后第3个月起每个月都生一对兔子的问题

可以考虑递归算法:

int Amount(int day)
{
if (day==10)
{
return 1;
}
else
{
return 2*(Amount(day-1)+1);
}
}

早说嘛。。。害的白写了个。。

这题可以多用几个递归函数解决,在这里我称不能生育的兔子为小兔,能生育的为大兔

int littleR(int month)
{
if (month==1)
return 0;
else
return bigR(month-1)+little(month-1);
}
int bigR(int month)
{
if (month==1)
{
return 1;
}
else if (month==2)
{
return 1;
}
else if (month==3)
{
return 1;
}
else
{
return bigR(month-1)+little(month-2);
}
}
int totalR(int month)
{
return littleR(month)+bigR(month);
}

注:这种增长速度的话很快兔子的数量就会增长到很大,所以如果month达到几十的话就会超过int范围,所以可以考虑用__int64代替int,另外到时候如果依然每次都递归的话运行速度也会变慢,可能要好几秒,好几分钟,甚至更长的时间才能算出结果,所以可以考虑用数组存每个递归函数算出的值,如:
littleR(int month)中else可写成
if (...)
{
...
}
else
{
if (a[month]!=0)
return month;
else
return a[month]=bigR(month-1)+little(month-1);
}
用这种方法可以适当提高运行速度。。。

㈡ 一道数学题如何通过C语言的递归函数实现,求大佬指点迷津

此题逻辑还是有一点复杂的,分析、实现代码及输出 见下图

㈢ c语言100道题中,兔子生兔子程序怎么理解

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

兔子的规律为数列:

1,1,2,3,5,8,13,21....


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

【代码一】使用迭代:

#include<stdio.h>
intmain()
{
longf1=1,f2=1;//兔子的数量
inti;//循环次数
intn;//要计算的月份

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只 ",i*2-1,f1);
printf("第%d个月有%d只 ",i*2,f2);

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

运行结果:

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

【方法二】使用递归:

#include<stdio.h>
intFeibonacci(intn){
if(n==1||n==2)
return1;
else
returnFeibonacci(n-1)+Feibonacci(n-2);
}
intmain(){
intn;//要计算的月份

printf("输入要计算的月数:");
scanf("%d",&n);

printf("%d个月的兔子总数为%d ",n,Feibonacci(n));

return0;
}


运行结果:

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


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

【代码三】使用数组

#include<stdio.h>
voidmain()
{
inta[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,a[n-1]);
}

运行结果:

请输入月数:10
第10个月的兔子为:55

㈣ c语言题老师留的 兔子繁殖问题,用递归函数的方法做。 个位大神编一个然后写下答案

斐波那契额数列 问题

#include<stdio.h>

intfib(intn)
{
if(n==1||n==2)
{
return1;
}
returnfib(n-1)+fib(n-2);
}

intmain(void)
{
printf("%d ",fib(3));
return0;
}

㈤ c语言数组 兔子繁殖

double a[100];
printf("第%d个月的兔子为:%0.2f\n", n, a[n-1]);
改一下

㈥ C语言编程:兔子繁殖问题

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineM13
intmain()
{
inti;
longa[M]={1,1};
for(i=2;i<M;i++)
{
a[i]=a[i-1]+a[i-2];

}
for(i=0;i<M;i++)
{
printf("%d月兔子总数:%d ",i,a[i]);

}
getch();
return0;}

㈦ C语言编程题目 兔子繁衍问题

方法一、用递归。

方法二、把兔子定义成结构,每个兔子自带计时器变量,繁殖就是新建节点,构建结构链表。每次循环遍历所有节点的计时变量大于3的就新建一个节点插入链表。最后统计节点数量。

我用方法1来写:

#include <stdio.h>

int childbirth(int bMth,int gMth)//bMth:调用时传0,gMth:经过的最大月数


{


int cnt=0,n=bMth,num=2;


while(n++<gMth+1)


if(cnt++>2)


num=num+childbirth(n,gMth+1);


return num;


}

int main()


{


int i,n;


printf("请输入经过多少月:"),scanf("%d",&n);


for(i=1;i<=n;i++)


printf("经过%d个月后:兔子数量为:%d ",i,childbirth(0,i));


return 0;


}

㈧ C语言递归N个月兔子

#include<stdio.h>
intdigui(intn);
intmain(void)
{
intn=0;
scanf("%d",&n);
printf("%d ",digui(n));
return0;
}
intdigui(intn)
{
returnn>1?digui(n-1)+digui(n-2):1;
}

㈨ c语言题老师留的 兔子繁殖问题,用递归函数的方法做。 个位大神编一个然后写下答案请写上兔子多少只

//兔子的对数,就是Fibonacci数列

//1 1 2 3 5 8 13 21 34 55 89 ...

#include<stdio.h>
intf(intn)
{
if(n<3)
return1;
else
returnf(n-2)+f(n-1);
}
voidmain()
{
intn;
scanf("%d",&n);
printf("%d年后,有兔子%d只. ",n,f(n));
}