| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1019 人关注过本帖
标题:有个递归调用不理解 :那个是如何运行的
只看楼主 加入收藏
crystal111
Rank: 2
等 级:论坛游民
帖 子:25
专家分:21
注 册:2009-11-15
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:9 
有个递归调用不理解 :那个是如何运行的
被调用的函数:
void convert(int n)
{int i;
if((i=n/10)!=0)convert(i);
putchar(n%10+'0');}  

是怎样运行的。如何解释
搜索更多相关主题的帖子: 运行 递归 
2009-12-24 15:29
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:15 
void convert(int n)
{ int i;
 if((i=n/10)!=0)//对输入的数取整,不为0时执行
     convert(i);
 putchar(n%10+'0');//输出结果是以字符的形式输出
}  
举个例子当你输入的n为123时,等于执行一下几个步骤,记住是从最后开始往上一直执行的!!

void convert(n) n=123
{
 if((i=n/10)!=0) i=12
     convert1(i);
 putchar(n%10+'0');
}
void convert1(n) n=12
{
 if((i=n/10)!=0) i=1
     convert2(i);
 putchar(n%10+'0');
}   
void convert2(n) n=1
{
 if((i=n/10)!=0)//此时n等于0 执行下一步输出
     convert3(i);
 putchar(n%10+'0');//此时输出字符'1'.
                 //然后在往上执行void convert1(n) 里面的putchar(n%10+'0');输出字符‘2’,
                // 再往上执行void convert(n) 里面的putchar(n%10+'0')输出字符‘3’
}  
2009-12-24 16:43
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
此题就是你输入一个数字,它以字符的形式将你输入的数字输出来···好好看一下吧···
2009-12-24 16:45
crystal111
Rank: 2
等 级:论坛游民
帖 子:25
专家分:21
注 册:2009-11-15
收藏
得分:0 
先谢谢陈大师了  为什么会往回执行呀!
2009-12-24 17:03
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
这就是递归的独特之处···程序执行中的回代过程是由编译程序自动完成的···
2009-12-24 17:12
磨成大力佛
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2009-9-28
收藏
得分:0 
陈大师,果然是大师
2009-12-24 20:21
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:2 
这是一个用递归的方法打印整数的过程, 分析如下:

如果数大于10, 则去掉个位成为一个比较小的数, 再用该过程打印, 完成后再打印 个位
如要打印123
第一次调用  第二次调用  第三次调用
  123   -->    12    ->    1
                           打印1
               打印2  <----
  打印3 <-----
2009-12-24 21:11
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:3 
2L陈大师的的分析过程很好。。LZ应该很容易理解了。。。我再补充一点点。。
   其实也不能算是往回执行,它只是执行一些函数剩下的内容而已,因为递归的时候是不断的嵌套的,你看你的递归的嵌套过程中的每个函数都是没执行完的,嵌套后都还有一个putchar(n%10+'0');没有执行,当递归到最后的时候,函数需要执行完那些剩下的语句才能真正结束程序。。。
  如果你了解栈的话,很容易就知道递归就是模拟压栈的过程。。。
2009-12-24 22:39
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
楼上的说的有理 哈哈 ····
2009-12-25 11:34
Naturalstory
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-8
收藏
得分:0 
我也明白了
2012-12-08 20:14
快速回复:有个递归调用不理解 :那个是如何运行的
数据加载中...
 
   



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

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