鱼C论坛

 找回密码
 立即注册
查看: 1893|回复: 3

退出递归函数的顺序

[复制链接]
发表于 2014-8-12 14:30:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void updown (int);
int main(void)
{
        updown(1);

}

void updown (int n)
{

        printf("%d,%p\n",n,&n);
        if(n<4)
                updown(n+1);
printf("%d,%p\n",n,&n);/*打印结果为什么是4,3,2,1的顺序*/
printf("***\n");       /*为什么在推出递归的过程中也会执行这一句*/
}
结果是
1  0018FEF4
2  0018FE9C
3  0018FE44
4  0018FEEC
4  0018FEEC
***
3  0018FE44
***
2  0018FE9C
***
1  0018FEF4
***
为什么在推出递归时,会执行printf("***\n");  语句呢,(事实上printf("%d,%p\n",n,&n);后的语句都会执行

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-12 20:57:28 | 显示全部楼层
因为每次调用的函数都会运行到底才会返回。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-13 10:48:30 | 显示全部楼层
本帖最后由 Cmpt 于 2014-8-13 10:49 编辑
#include<stdio.h>
void updown (int);

int main(void)
{
        updown(1);
}

void updown (int n)
{
        printf("%d,%p\n",n,&n);
        if(n<4)
                updown(n+1);
        printf("%d,%p\n",n,&n); /* 程序如果能走到这里, 说明n = 4。 所以,先打印4 */
        printf("***\n");               /*这一句是接近着上一个printf打印的*/
}

提一下问题:
1. 代码不规范, 给你解决问题的人读起来费劲
2. 递归问题可以画一下调用关系(递归工作栈), 问题就会清晰

初学递归问题会比较麻烦, 见多了, 分析多了以后就觉得容易了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-16 19:16:02 | 显示全部楼层
麻烦了,谢谢各位的帮忙。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表