该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

首先你的main函数调用printN,作为调用者他会做这么几件事

1.将参数10压栈;

2.将Return Address压栈,即第19行的地址;

3.跳转到函数体;

在函数体中,作为被调用者他会做这么几件事:

......初始化操作......

if N != 0

将N-1压栈,

将Return Address压栈,即第6行的地址,

然后跳转到函数体;

打印N的值;

else

......恢复操作.....

函数返回;

当N=0时,栈帧类似下面的情况:

------------------------

saved ebp(下方栈帧的ebp地址)

------------------------

return address

------------------------

N=0

------------------------

saved ebp (下方栈帧的ebp地址)

------------------------

return address (EBP+4)

------------------------

N=1 (EBP+8)

------------------------

.....

------------------------

saved ebp

------------------------

return address

------------------------

N=9

------------------------

saved ebp (main函数栈帧的ebp地址)

------------------------

return address

------------------------

N=10

------------------------

....

------------------------

当N=0时,并且if执行完成后,会:

1.恢复esp(销毁局部变量),弹出ebp(ebp为下面栈帧的地址);

2.跳转到返回地址

然后执行返回地址+1处的代码,打印出N=1(因为ebp已经恢复,参数就是EBP+8这个位置的元素 );

...依次类推...

最后返回main函数的栈帧继续执行;

c语言递归1到10联程,为什么这个递归能输出1到10相关推荐

  1. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

    知识库递归编程java和prolog代码:逻辑语言Prolog简介(附24555字PDF发"递归prolog简介"下载) 数据简化DataSimp 今天 数据简化DataSimp导 ...

  2. ACMNO.37 C语言-数字交换 输入10个整数,将其中最小的数与第一个数对换,然后把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。

    题目描述 输入10个整数,将其中最小的数与第一个数对换,然后把最大的数与最后一个数对换. 写三个函数: ①输入10个数:②进行处理:③输出10个数. 输入 10个整数 输出 整理后的十个数,每个数后跟 ...

  3. c语言递归函数变量作用域,C语言课程变量的作用域和生存周期、递归.ppt

    C语言课程变量的作用域和生存周期.递归 函数的定义和函数的调用 函数定义格式: 返回值类型 函数名(类型 参数1,类型 参数2,-) { 函数体 return 表达式; } 函数调用格式: 函数名(参 ...

  4. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)

    给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...

  5. 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)

    给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...

  6. 学习笔记9-C语言-传参、类型限定符、递归

    函数传参: 1.形参变量属于它所在的函数,出了该函数就不能使用 2.实参与形参之间都是以赋值的形式进行数据传递(值传递) 3.return 其实是把返回值数据放置到一个公共的区域(函数和函数调用者), ...

  7. c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注回答:#includestdio.h void swap(int * ...

  8. 1个球从100m落下,每次时,反跳原高度的一半,再落,再反弹,求第10次落地共经过多少m,第10次反弹多高。 谭浩强《c语言程序设计》第五章第十一题

    题目 本题是谭浩强<c语言程序设计>第五章第十一题 题目:1个球从100m落下,每次时,反跳原高度的一半,再落,再反弹,求第10次落地共经过多少m,第10次反弹多高. 提示:以下是本篇文章 ...

  9. php (0.1 0.7)10,int((0.1 + 0.7)* 10)= 7在几种语言。 如何防止这一点?

    int((0.1 + 0.7)* 10)= 7在几种语言. 如何防止这一点? 最近我遇到了几种语言的错误/function. 我有一个非常基本的知识,它是如何引起的(我想要一些详细的解释),但是当我想 ...

  10. 杨辉三角形递归c语言,关于【杨辉三角】的递归解决方法,请教。有没有大神【【高手】】...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [问题在于,最前面的是输出的只占有一个字符,但是后面的都是占有4个字符位!这怎么解] 在7-1题,我们输出的数字三角形,叫做杨辉三角形,是二项式的系数,当 ...

最新文章

  1. python 文件保存读取时不用with的问题
  2. codis 部署和测试
  3. 第九章 结构体与共用体
  4. SAP Intelligent Robotic Process Automation权限控制
  5. LwIP之网络接口管理
  6. python ant_python3.7.1ant+TKinter在Tkin中显示来自ANT+设备的实时数据
  7. CS0016错误解决汇编
  8. 游戏开发所需要看的书
  9. 社会工程学主要学习内容及书籍推荐
  10. 项目质量管理的几种常规方法
  11. 吃透Kafka六:topic 创建过程
  12. android v2签名机制,APK签名机制之——V2签名机制详解
  13. pythonfor反向循环_python如何实现反向迭代
  14. 巴旦木树苗适合在哪些地方种植?巴旦木苗木成长过程
  15. 手机拍照技巧(一:校园拍摄)
  16. 颜体html标签,颜体楷书笔法32式详解,一定不能错过!(超级干货)
  17. 记一次神奇的CVPR 2021 Rebuttal 经历
  18. shader学习之路——更复杂的光照之Base Pass 和 Additional Pass和光照的衰减
  19. docker 雷电模拟器
  20. 当税收遇到了电商 团购网站遭遇尴尬

热门文章

  1. RPi 2B Raspbian system install
  2. HTML学习基础教程
  3. 01背包 Codeforces Round #267 (Div. 2) C. George and Job
  4. 淘宝TOP获取sessionkey
  5. Imc手机连环画PC阅读器
  6. perl--CGI编程之Apache服务器安装配置
  7. [公告]积分算法问题改正
  8. php vm_facebook hiphop php vm 兑现概述(二)
  9. html语言添加点击事件,vue 中拼接html时添加点击事件
  10. 重构Webpack系列之一 ---- 概念篇