OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3995|回复: 4

C语言的递归

[复制链接]

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
发表于 2016-5-12 10:33:31 | 显示全部楼层 |阅读模式
2金钱
输出的结果是
1
2
3
4
但是我分析的结果是只输出1,printf()函数怎么被执行了4次啊??


[mw_shl_code=c,true]#include <stdio.h>

void PrintfOut(unsigned int N);

int main(void)
{
        PrintfOut(1234);
        getchar();
        return 0;
}
void PrintfOut(unsigned int N)
{
        if (N >= 10)
        {
                PrintfOut(N / 10);
        }
        printf("%d\r\n",N%10);
}[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

第一次进入PrintfOut的时候,参数记为N1 = 1234, N1 > 10,再次进入PrintfOut函数 第二次进入PrintfOut的时候,参数记为N2 = 123, N2 > 10,再次进入PrintfOut函数 第三次进入PrintfOut的时候,参数记为N3 = 12 , N3 > 10,再次进入PrintfOut函数 第四次进入PrintfOut的时候,参数记为N4 = 1 , N4 < 10,此时执行printf打印 N4 %10 = “1” 此时退出第四进入的PrintfOut函数,回到第三次的PrintfOut继续运行,注 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-5-12 10:33:32 | 显示全部楼层
第一次进入PrintfOut的时候,参数记为N1 = 1234, N1 > 10,再次进入PrintfOut函数
第二次进入PrintfOut的时候,参数记为N2 = 123,   N2 > 10,再次进入PrintfOut函数
第三次进入PrintfOut的时候,参数记为N3 = 12  ,   N3 > 10,再次进入PrintfOut函数
第四次进入PrintfOut的时候,参数记为N4 = 1    ,   N4 < 10,此时执行printf打印 N4 %10 = “1”
此时退出第四进入的PrintfOut函数,回到第三次的PrintfOut继续运行,注意,你if之后没有else,所以当退出函数之后,会执行后面的printf。
回到第三次PrintfOut的时候,继续运行printf打印 N3 % 10 = "2" , 退出第三次,回到第二次。
回到第二次PrintfOut的时候,继续运行printf打印 N2 % 10 = "3" , 退出第二次,回到第一次。
回到第一次PrintfOut的时候,继续运行printf打印 N1 % 10 = "4" , 退出第一次,回到main。
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2016-5-12 13:02:05 来自手机 | 显示全部楼层
什么是递归调用?楼主把递归调用自己展开,一看代码就明白了!
回复

使用道具 举报

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
 楼主| 发表于 2016-5-13 10:36:19 | 显示全部楼层
ianhom 发表于 2016-5-12 10:33
第一次进入PrintfOut的时候,参数记为N1 = 1234, N1 > 10,再次进入PrintfOut函数
第二次进入PrintfOut的 ...

多谢,明白啦。。
回复

使用道具 举报

5

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-5-29
在线时间
5 小时
发表于 2016-6-7 09:31:38 | 显示全部楼层
路过学习
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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