c语言函数递归生兔子 c语言函数递归调用简单例子

C语言递归的方法:有一对兔子,从出生后第3个月起每个月都生一对兔子的问题可以考虑递归算法:
int Amount(int day)
{
if (day==10)
{
return 1;
}
else
{
return 2*(Amount(day-1) 1);
}
}
早说嘛 。。。害c语言函数递归生兔子的白写了个 。。
这题可以多用几个递归函数解决c语言函数递归生兔子,在这里我称不能生育的兔子为小兔,能生育的为大兔
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语言100道题中,兔子生兔子程序怎么理解有一对兔子 , 从出生后第 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只
【方法二】使用递归:
#includestdio.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语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈
【代码三】使用数组
#includestdio.h
void main()
{
int a[100] ,i,n;
printf("请输入月数:");
scanf("%d",n);
a[0]=a[1]=1;
for(i=2;in;i)
a[i]=a[i-1] a[i-2];
printf("第%d个月的兔子为:%d\n", n, a[n-1]);
}
运行结果:
请输入月数:10
第10个月的兔子为:55
c语言题老师留的 兔子繁殖问题,用递归函数的方法做 。个位大神编一个然后写下答案请写上兔子多少只//兔子的对数 , 就是Fibonacci数列
//1 1 2 3 5 8 13 21 34 55 89 ...
#include stdio.h
int f(int n)
{
if(n3)
return 1;
else
return f(n - 2)f(n - 1);
}
void main()
{
int n;
scanf("%d", n);
printf("%d年后,有兔子%d只.\n", n, f(n));
}
C语言编程题目 兔子繁衍问题?方法一、用递归 。
方法二、把兔子定义成结构,每个兔子自带计时器变量,繁殖就是新建节点,构建结构链表 。每次循环遍历所有节点的计时变量大于3的就新建一个节点插入链表 。最后统计节点数量 。
我用方法1来写:
#include stdio.h
int childbirth(int bMth,int gMth)//bMth:调用时传0,gMth:经过的最大月数
{
int cnt=0,n=bMth,num=2;
while(ngMth 1)
if(cnt2)
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\n",i,childbirth(0,i));
return 0;
}
【c语言函数递归生兔子 c语言函数递归调用简单例子】c语言函数递归生兔子的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言函数递归调用简单例子、c语言函数递归生兔子的信息别忘了在本站进行查找喔 。

    推荐阅读