| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:[求助]诚请老鸟伸伸手!!
只看楼主 加入收藏
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
结帖率:66.67%
收藏
 问题点数:0 回复次数:16 
[求助]诚请老鸟伸伸手!!

这是大学C++课本上的一道题,算牛生牛的问题,我已经做出来了,但如何改成用递归的方法做呢?

我对递归实在是不开窍,请回帖的朋友说一下循环改成递归的一般方法,有现成的对照代码更好,谢谢。

/*4岁牛生牛的统计问题
算法描述:用一个数组存储不同年龄的牛,4岁以上的算一组可以生育。
在N年中模拟牛群按规律增长的发展过程。
*/
#include "iostream"
using namespace std;
int main()
{
int n; //年
long cow[5]; //不同年齡的牛
for(int i=2;i<5;++i)
cow[i]=0; //初始时没有2岁以上的牛
cow[1]=1; //1岁的牛只有一头
cout<<"Input N:";
cin>>n;
for(int i=2;i<=n;++i)
{
cow[4]+=cow[3]; //3岁的加到可生育组中
cow[3]=cow[2]; //2岁的长到3岁
cow[2]=cow[1]; //1岁的长到2岁
cow[1]=cow[4]; //4岁以上的生牛
}
cout<<"Sum of the cow is:"<<cow[1]+cow[2]+cow[3]+cow[4]<<endl;
cin.get();
}

搜索更多相关主题的帖子: 如何 课本 include 
2006-10-11 18:08
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
呵呵,你把规则说出来吧。看代码找规则麻烦

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-11 18:42
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 
书上是这样说的:

若一头母头,从出生起第四年开始每一年生一头母头,按这个规律N年后会有多少头牛?

我是用这个循环实现的:

for(int i=2;i<=n;++i)
{
cow[4]+=cow[3]; //3岁的加到可生育组中
cow[3]=cow[2]; //2岁的长到3岁
cow[2]=cow[1]; //1岁的长到2岁
cow[1]=cow[4]; //4岁以上的生牛
}

还有,请问STL的SORT()怎么用啊?

其实我也很无聊!
2006-10-11 19:02
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
请问STL的SORT()怎么用啊?
//这个看MSDN说的更清楚些。


int Col(int n)
{
if(n<8)return n-2;
else return Col(n-1)+n-6;
}
试试。。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-11 19:21
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 
不行呀,我也没看明白你的代码

col(100)=4469

正确结果应该是:234467045

版主还是告诉我方法吧,用数组的或向量的递归函数,谢谢

其实我也很无聊!
2006-10-11 20:12
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
1,2,3年都是1头,4年2头,5年3头,7年5头,8年7头(2头4岁以上的牛),9年10头(3头),10年14头(4头),11年19头(5头)

也就是说,头一年的猪加上(4岁以上的猪的个数)等于今年的猪的个数。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-11 20:41
雨夜微醺
Rank: 1
等 级:新手上路
威 望:1
帖 子:147
专家分:0
注 册:2006-9-25
收藏
得分:0 
好象不对,假设有2头4岁的牛。他们就会生2头小牛,四年后,这2头小牛会同时变成4岁。也就是说,4岁牛不是一头一头的增加的。我再考虑一下。

我若想到你就有种莫名的开心 我一见到你就有种莫名的悸动
2006-10-11 21:46
雨夜微醺
Rank: 1
等 级:新手上路
威 望:1
帖 子:147
专家分:0
注 册:2006-9-25
收藏
得分:0 

#include <iostream>
using namespace std;

long Mu(int t)//母牛数
{
if(t<=14)
return 14;//第14年的母牛数,楼主可以自己看看
else
return Mu(t-1)+Mu(t-4);
}
int main()
{

long cow;
int t=14;
cow=Mu(t)+Mu(t-1)+Mu(t-2)+Mu(t-3);
cout<<cow;
cin.get();
return 0;
}

这改可以啦。


我若想到你就有种莫名的开心 我一见到你就有种莫名的悸动
2006-10-11 22:07
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 

虽然按楼上说的改下能出结果,但说句实话,我还是不懂,改完后这样:

#include <iostream>//和我发贴时的程序算出的结果一样,40以上的没试过,递归太耗时间
using namespace std;

long Mu(int t)//母牛数
{
if(t<=14)
{
if(t==14)return 88;
if(t==13)return 60;
if(t==12)return 41;
if(t==11)return 28;
if(t==10)return 19;
if(t==9)return 13;
if(t==8)return 9;
if(t==7)return 6;
if(t==6)return 4;
if(t==5)return 3;
if(t==4)return 2;
if(t==3)return 1;
if(t==2)return 1;
if(t==1)return 1;
}
else
return Mu(t-1)+Mu(t-3);//为什么要返回这个数呀?
}

int main()
{

long cow;
int t=40;
cow=Mu(t);//+Mu(t-1)+Mu(t-2)+Mu(t-3);
cout<<cow;
cin.get();
return 0;
}

请雨夜微醺给我讲讲吧,要不加上注释也行。


其实我也很无聊!
2006-10-11 22:30
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 

现在改成这样了:

#include <iostream>
using namespace std;

long Mu(int t)//母牛数
{
if(t<=3)
return 1;
else
return Mu(t-1)+Mu(t-3);//为什么要返回这个数?
}
int main()
{

long cow;
int t=100;
cow=Mu(t);
cout<<cow;
cin.get();
return 0;
}

算100年时CPU占用达到97%以上,大约900K内存,用了10分钟没有结果,消耗太大了


其实我也很无聊!
2006-10-11 22:43
快速回复:[求助]诚请老鸟伸伸手!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016928 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved