第三章-栈与递归资料.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
画一下+ - * /的优先级矩阵 * 画一下+ - * /的优先级矩阵 * 画一下+ - * /的优先级矩阵 * hanoi(n-1,x,z,y);// 将x上编号为1至n-1的圆盘移到y, z作辅助塔 hanoi(n-1,y,x,z) ;// 将y上编号为1至n-1圆盘移到z, x作辅助塔 * 递归的实现 void main { ... a( ); ... } void a() { ... b( ); ... } void b( ) { ... } main( ) call a end function a function b call b ? ? ? ? ? ? ? ? ? 执行流程转向被调用函数后,其参数和内部变量在哪保存? 每个函数调用完后,执行流程指向何处? 将所有的实在参数、返回地址等信息传递给被调用函数保存; 为被调用函数的局部变量分配存储区; 将控制转移到被调用函数的入口。 当在一个函数的运行期间调用另一个函数时,在运行该被调用函数之前, 需先完成三项任务: 保存被调函数的计算结果; 释放被调函数的数据区; 依照被调函数保存的返回地址将控制转移到调用函数。 从被调用函数返回调用函数之前,应该完成下列三项任务: 递归 多个函数嵌套调用的规则是: 此时的内存管理实行“栈式管理” 后调用先返回 ! 例如: void main( ){ void a( ){ void b( ){ … … … a( ); b( ); … … }//main }// a }// b Main的数据区 函数a的数据区 函数b的数据区 递归工作栈:递归执行过程中占用的数据区 递归工作记录:每一层递归参数合成一个记录 当前活动记录:栈顶记录指示当前层执行情况 当前环境指针:递归工作栈的栈顶指针 递归函数执行的过程可视为同一函数进行嵌套调用: fact(3) p= fact(2) p= fact(1) 5 5 6 6 8{返回6} 8 {返回2} 8 {返回1} int fact(int n) 1:{ 2:if (n==1) 3: return (1); 4:else { 5:p= fact(n-1); 6:return( n*p); 7: } 8:} //fact 看系统栈中的变化情况:(地址0表示调用该函数的主程序的返回地址) 0 3 5 2 5 1 递归过程是后调用先返回,系统需设立一个“递归工作栈”,每一层递归所需信息构成一个“工作记录(结构体类型的数据)”,(包括所有的形参,所有的局部变量以及上一层的返回地址)。 (1)每调用一次递归函数,就产生一个新的工作记录压入栈顶。 (2)每完成一次递归函数的调用,就从栈顶弹出一个工作记录。 (3)栈顶的工作记录就是目前正在执行的函数。 递归 递归工作记录的数据有: (1)上一层函数调用的返回地址 (2)形参表(存放的是实参值) (3)局部变量 递归工作栈 栈顶: 递归工作记录n …… 递归工作记录2 栈底: 递归工作记录1 栈顶记录为当前活动记录,即正在执行的函数。 TOP 递归 分析程序的执行过程(语句前面的数字表示语句的地址) 10 #include stdio.h 20 void change(int n) 30 { 40 int x; 50 if(x=n/10)change(x); 60 putchar(n%10+48); 70 } 80 void main() 90 { 100 change(3245); 110} 110 3245 324 返回 n x 地址 形参 局部变量 第一次调用: change(3245); 3245 10 #include stdio.h 20 void change(int n) 30 { 40 int x; 50 if(x=n/10)change(x); 60 putchar(n%10+48); 70 } 80 void main

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档