| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 387 人关注过本帖
标题:递归的使用 没有明白~求教
只看楼主 加入收藏
wjl0522
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2013-7-16
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:2 
递归的使用 没有明白~求教
我看的书是c primer plus

//程序清单9.6 递归
#include <stdio.h>
void sum (int n);
int main (void)
{
    sum(1);
    return 0;
}
void sum (int n)
{
    printf("one %d %p\n",n,&n);
    if (n < 4)
    sum(n+1);
    printf("two %d %p\n",n,&n);
}

//标准答案:
one 1    xx
one 2    xx
one 3    xx
one 4    xx
two 4    xx
two 3    xx
two 2    xx
two 1    xx

//分析
sum (1)
{
    one 1 xx
   
    if (1 < 4)
    sum (2)
    one 2 xx
   
    if (2 < 4)
    sum (3)
    one 3 xx
   
    if (3 < 4)
    sum (4)
    one 4 xx
    if (4 < 4)    //假 放弃 进行下一段
    two 4 xx    //最后判断真为4 所以保存为4 结束..我不知道另外3个是怎么运行的 不懂...读了好几遍都没懂
   
}


搜索更多相关主题的帖子: include return 
2013-07-16 12:48
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:5 
比如说n=1,进入sum(1),这时候先执行 “printf("one %d %p\n",n,&n);”,然后进入IF语句判断,符合条件出来之后执行sum(n+1),注意,到了这里,后面的那条语句“printf("two %d %p\n",n,&n);”是一次都还没有执行的,因为if语句执行完之后就继续调用sum函数了,第二步,sum(2),进入首先执行“printf("one %d %p\n",n,&n);”,然后进入IF语句判断,符合条件出来之后执行sum(n+1),这条语句“printf("two %d %p\n",n,&n);”还是没执行,第三步,sum(3),进入后首先执行“printf("one %d %p\n",n,&n);”,然后进入IF语句判断,符合条件出来之后执行sum(n+1),同样,“printf("two %d %p\n",n,&n);”不被执行,第四步,sum(4),进去后首先执行 “printf("one %d %p\n",n,&n);”,然后进入IF语句判断,4<4不满足条件,则不执行sum(n+1)了,注意:这时候开始执行“printf("two %d %p\n",n,&n);”了,就首先输出
two 4 0033F9B8,因为前面每次执行完if语句后就调用了sum函数,其实是还没完整地执行完一个sum函数的函数体所有内容的,就比如说,sum(1),它还有最后一条printf语句没有执行完,sum(2),sum(3)也是,它们被调用的顺序是sum(1)->sum(2)->sum(3)->sum(4),由于最后是首先输出“two 4 0033F9B8”,可以推出它们是反过来的顺序输出最后一条printf语句,直到一个sum函数体的内容全部执行完为止
如果楼主学了C++的类与派生类的构造函数与析构函数的执行顺序就好理解了

思考赐予新生,时间在于定义
2013-07-16 13:28
wjl0522
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2013-7-16
收藏
得分:0 
回复 2楼 love云彩
首先说一声谢谢~
这题我反复思考了很久 不想不懂就pass 担心问题越级越多就不好了

你给的解释基本上能让我理通顺序了 c这东西好多东西不知到怎么用语言表达..

好吧 这题算解决了 在次说谢谢
2013-07-16 14:19
快速回复:递归的使用 没有明白~求教
数据加载中...
 
   



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

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