| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖, 1 人收藏
标题:求助:有一代码关于递归调用,但有不明白,请指教!
只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏(1)
 问题点数:0 回复次数:4 
求助:有一代码关于递归调用,但有不明白,请指教!
clear
do sub2 with 5
cancel
_______sub2.prg_____
*sub2.prg
para y
if y>1
do sub2 with y-1
endif
?replicate("*",y)
return
______运行结果答案:____
*
**
***
****
*****
问题:
1、刚开始时把5传递给sub2.prg时 ,接收5进行判断Y>1进行调用递归,在应先输出5个*,为什么是1个*,好象应是倒过三角形
2、y=1是调用递归出口,现在还在y=5,y-1=4,3,2,还在进行递归阶段,怎么能执行?replicate("*",y),只有y=1时才能执行
?replicate("*",y),?replicate("*",y)什么时候执行?
if y>1
do sub2 with y-1
endif
?replicate("*",y)
调用递归到底是怎样一回事,能指教一下,最好通俗一点详细些,多谢了!


[ 本帖最后由 sylknb 于 2010-12-2 11:28 编辑 ]
搜索更多相关主题的帖子: 递归 代码 指教 
2010-12-02 10:56
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
由于
if y>1
do sub2 with y-1
endif
所以 先依次 5,4,3,2 执行 sub2
当 Y=1 时,才执行 replicate("*",y),并且
依次 2,3,4,5 执行完 replicate("*",y)。

2010-12-02 14:03
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
它的运行过程如否这样理介。
第一次para 接到y=1,不要递归,输出1个*。
第二次para 接到y=2 判断要递归,y-1-->(2-1)=1,para 接到y=1,不要递归,又输出1个*。
依次类推3---5最终都要弄到1然后输出,这样输出又变成了纵的5个*,不会变成三角形的*
 ?replicate("*",y)中的y到底是哪一个?到底是para 刚接到的Y还是y-1后的Y?
总之递归的具体执行过程还是不清楚,请指教。
para y
if y>1
do sub2 with y-1
endif
?replicate("*",y)
return


[ 本帖最后由 sylknb 于 2010-12-2 17:47 编辑 ]
2010-12-02 17:45
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 

 
clear
do sub2 with 5
cancel
**_______sub2.prg_____
proc sub2
para y
?replicate("*",y)  && 将这句从你原来位置放在这儿, 再运行比较一下, 就应该明白是怎么回事了~
if y>1
   do sub2 with y-1
endif
return

 
2010-12-02 19:12
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
能否介释下先进行5的判断,但先输出是1个*?
2010-12-02 21:15
快速回复:求助:有一代码关于递归调用,但有不明白,请指教!
数据加载中...
 
   



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

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