为了账号安全,请及时绑定邮箱和手机立即绑定

请问下那个递归的方法我看不明白呀...怎么求的母牛数???

请问下那个递归的方法我看不明白呀...怎么求的母牛数???

C C++
蝴蝶不菲 2022-07-14 19:11:58
一母牛从出生起第4个年头开始每年生一母牛..问第n年有多少母牛??long num_cow(int n){ int i;long sum=1;for(i=4;i<n;i++)sum+=num_cow(n-i);return sum;}for(i=4;i<n;i++)sum+=num_cow(n-i);这怎么做的...我看不懂...哪位高人能够提供详细的解释么...
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

重新看了一下,算法有问题,牛的问题如下:(设小牛是刚刚生下来的牛,老牛是年龄大于4个月可以生小牛的牛)
1月:小牛:1;老牛:0;总数:1(小牛成长中)
2月:小牛:1;老牛:0;总数:1(小牛成长中)
3月:小牛:1;老牛:0;总数:1(小牛成长中)
4月:小牛:1;老牛:1;总数:2(小牛长成老牛,并生下小牛)
5月:小牛:2;老牛:1;总数:3(小牛成长中,本月的老牛又生下小牛)
6月:小牛:3;老牛:1;总数:4(小牛成长中,本月的老牛又生下小牛)
7月:小牛:4;老牛:2;总数:6(4月的小牛长成,本月的老牛又生下小牛)
……
你的程序得到的结果不是这个而是:1,1,1,1,2,3,4,5,7,10……的规律。
其实这个数列和Fibonacci数列差不多,Fibonacci数列的问题是有一只兔子,到第三个月以后就会每月生下小兔子(比生牛要可爱),然后求得每月的总兔子数。

根据你的问题可以得到以下牛总数的规律:
n<=3时 sum(n)=1
n>3时 sum(n)=sum(n-1)+sum(n-3)
(这个规律的得出是有道理的,在这里就不说明了)
所以程序如下:
===============================

#include <stdio.h>

int main()
{
long sum(int);
int n;
scanf("%d",&n);
printf("the sum of month %d is %ld",n,sum(n));
scanf("%d");
}

long sum(int n)
{
if(n<=3)
return(1);
else
return(sum(n-1)+sum(n-3));
}

//本程序在dev-cpp下调试通过


查看完整回答
反对 回复 2022-07-18
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

for(i=4;i<n;i++)
{
sum = sum + num_cow(n-i);
}

看懂了吗

查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号