| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1247 人关注过本帖
标题:一个递归的题目,不懂是怎么实现的!
只看楼主 加入收藏
fwhao
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-8-13
收藏
 问题点数:0 回复次数:10 
一个递归的题目,不懂是怎么实现的!

#include<conio.h>
int count(int n)
{
if(n==1)
return 0
else if(n%2==0)
return count(n/2)+1;
else
return count(n*3+1)+1;
}

main()
{
int n;
scanf("%d",&n);
printf("%d",count(n));
getch();
}
题目入上
因为它的递归是放在return里,不象是以前做过的那些先做完再return,所以就就不懂得是怎么实现递归了!
请帮忙解释一下.

搜索更多相关主题的帖子: 递归 count return 
2007-10-21 13:23
风的声音
Rank: 1
等 级:新手上路
帖 子:128
专家分:0
注 册:2007-3-27
收藏
得分:0 
那里不好理解阿,举一个简单的例子吧,加入你输入一个是4,那么你调用count(4);在程序中应该结果为
retrun count(2)+1;那么接着就又转入执行count(2),而不是执行return语句,同时将这个位置的地址保留起来,呆会返回的时候继续执行,这个时候执行count(2),结果是return count(1)+1;
这个时候又转入执行count(1);结果count(1)返回值为,return 0;
那么挨个带回的话,就会发现最后的值应该是2;
可能你是没有注意到return count()+1;的结构,返回的值是一个函数的值加上一。
不知道 你明白没有

一念心清净,莲花处处开。 一花一净土,一土一如来。
2007-10-21 16:19
keloy
Rank: 2
等 级:论坛游民
帖 子:107
专家分:16
注 册:2007-9-27
收藏
得分:0 

这题目好像是这个样子的,输入一个n,当n为偶数的时候n=n/2;当n为奇数的时候n=n*3+1;最后返回的结果就是n变到1时需要经历的步骤

2007-10-21 16:25
风的声音
Rank: 1
等 级:新手上路
帖 子:128
专家分:0
注 册:2007-3-27
收藏
得分:0 
以下是引用keloy在2007-10-21 16:25:43的发言:

这题目好像是这个样子的,输入一个n,当n为偶数的时候n=n/2;当n为奇数的时候n=n*3+1;最后返回的结果就是n变到1时需要经历的步骤

我晕 ,那还要用到递归吗??呵呵,你好好看看最后那个返回值。
对了,我还不知道这个函数到底是干嘛的??


一念心清净,莲花处处开。 一花一净土,一土一如来。
2007-10-21 16:30
keloy
Rank: 2
等 级:论坛游民
帖 子:107
专家分:16
注 册:2007-9-27
收藏
得分:0 

好像是我说的这个样子的哈,他在每经历一步递归的是后返回值就加一;返回值是return count()+1;比如n=4;就进行count(2);在转入count(1);结果1的返回值是0;于是从底向顶的构架,于是就是0+1+1=2;所以返回值是2;就是说一共进行了2次的递归;

我上次没说清楚,现在清楚了撒,不是和你的意思是一样的嘛。

2007-10-27 16:40
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 

楼上说的都很对...

这个程序,也挺好理解的.


在我的眼里,这个世界是由0和1组成的!~
2007-10-27 19:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
看不懂递归的时候就把整个递归过程全部展开来看.

倚天照海花无数,流水高山心自知。
2007-10-27 20:33
rayxiang
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2007-10-22
收藏
得分:0 
         有点难哦 .......

...........没 有 音 乐 就 没 法 活............ ...........不 会C 语 言 我 可 以 问...........
2007-10-27 21:52
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 
以下是引用fwhao在2007-10-21 13:23:45的发言:

#include<conio.h>
int count(int n)
{
if(n==1)
return 0
else if(n%2==0)
return count(n/2)+1;
else
return count(n*3+1)+1;
}

main()
{
int n;
scanf("%d",&n);
printf("%d",count(n));
getch();
}
题目入上
因为它的递归是放在return里,不象是以前做过的那些先做完再return,所以就就不懂得是怎么实现递归了!
请帮忙解释一下.

可以这样啊:
int m;
if(n==1)
m=0;
return m;
else if(n%2==0)
return m=count(n/2)+1;
return m;
else

m=count(n*3+1)+1;

return m;

}
不就相LZ的要求了!


方寸之内,剖天下; 方坛之内,析自我;
2007-10-27 22:09
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
递归可以理解为压栈、出栈。这样就容易理解了

学好C++
2007-10-27 22:12
快速回复:一个递归的题目,不懂是怎么实现的!
数据加载中...
 
   



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

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