当前位置: 代码迷 >> C语言 >> 一个递归的题目,不懂是怎么实现的!
  详细解决方案

一个递归的题目,不懂是怎么实现的!

热度:119   发布时间:2007-10-21 13:23:45.0
一个递归的题目,不懂是怎么实现的!

#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  

----------------解决方案--------------------------------------------------------
那里不好理解阿,举一个简单的例子吧,加入你输入一个是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;的结构,返回的值是一个函数的值加上一。
不知道 你明白没有
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
以下是引用keloy在2007-10-21 16:25:43的发言:

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

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


----------------解决方案--------------------------------------------------------

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

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


----------------解决方案--------------------------------------------------------

楼上说的都很对...

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


----------------解决方案--------------------------------------------------------
看不懂递归的时候就把整个递归过程全部展开来看.

----------------解决方案--------------------------------------------------------
         有点难哦 .......
----------------解决方案--------------------------------------------------------
以下是引用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的要求了!
----------------解决方案--------------------------------------------------------
递归可以理解为压栈、出栈。这样就容易理解了
----------------解决方案--------------------------------------------------------

  相关解决方案