第三章栈辨析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 第三次执行函数f 形参n: 2 第二次执行函数f 形参n: 3 第一次执行函数f 形参n: 4 递归函数的执行 long f(int n) { if (n1) return n*f(n-1); else return 1; } 调用f(3) 计算并返回4*f(3) 调用f(2) 计算并返回3*f(2) 调用 调用f(1) 计算并返回2*1 调用 返回 return n*f(n-1); * 第二次执行函数f 形参n: 3 第一次执行函数f 形参n: 4 递归函数的执行 long f(int n) { if (n1) return n*f(n-1); else return 1; } 调用f(3) 计算并返回4*f(3) 调用f(2) 计算并返回3*2 调用 返回 return n*f(n-1); * 第一次执行函数f 形参n: 4 递归函数的执行 long f(int n) { if (n1) return n*f(n-1); else return 1; } return n*f(n-1); 调用f(3) 计算并返回4*6 调用f(4)得到24 递归适用的情况 递归定义的数学函数 如阶乘函数,斐波纳契数列等 本身具有递归特性的数据结构 如二叉树、广义表等 虽然问题本身没有明显的递归结构,但用递归来求解比迭代更简单 如八皇后问题、Hanoi塔问题 汉诺塔来源于印度传说的一个故事。 Benares,标志着世界中心的神圣庙宇中,放置着三根金刚柱,在一根柱子上摞着64片黄金圆盘,最大的盘子在最下边,从下到上,盘子越来越小。上帝命令婆罗门把圆盘按大小顺序摆放在另一根柱子上。并且规定,小圆盘上不能放大圆盘,并且一回只能移动一个圆盘。当盘子移动完,庙宇、塔将会化为灰尘,整个宇宙也会在一瞬间闪电式般毁灭。 或许有人相信婆罗门至今仍在一刻不停地搬动着圆盘。 你是否会相信,移动圆片的次数大到可能婆罗门都无法完成? 18446744073709551615次! 汉诺塔传说 需要考虑:盘子数 开始放置的塔座 目标塔座 临时放置塔座 Move(8,‘A’,‘B’,‘C’) 问题分析 分治法 将问题化为规模更小的子问题,确保子问题的问题性质和原问题一样。最小的问题可以直接求解。 递归策略 A B C 例:Hanoi塔问题。将a塔上的n个盘子通过b塔移到c塔上。 规则: (1)每次只能移动一个 (2)盘子只许在三座塔上存放 (3)不许大盘压小盘 将 n 个盘分成两个子集(1至n-1 和 n ),从而产生下列3个子问题: 1) 将1至n-1号盘从 A塔移动至 B 塔; 2) 将n号盘从 A 塔移动至 C 塔; 3) 将1至n-1号盘从B塔移动至C塔; 三个子问题如下: 递归方法:Hanoi(n-1, A, C, B) 递归方法: Hanoi(n-1, B, A, C) move(A,n,C); void hanoi(int n,char x,char y,char z) { if (n== 1) move(x,1,z);//x塔上的1号盘移到Z塔, else { hanoi(n-1,x,z,y); move(x,n,z); //x塔上的n号盘移到Z塔, hanoi(n-1,y,x,z) ; } } // hanoi main(){ int n; cinn; hanoi(n,’a’,’b’,’c’); } 看 A 柱上有2只盘子hanoi(2, A, B, C)的情况: hanoi(1,A,C,B); move(A,2,C); hanoi(1,B,A,C); 如何读递归算法? A B C 2 1 move(A,1,B); move(A,2,C); move(B,1,C); 看 A 柱上有3只盘子hanoi(3, A, B, C)的情况: hanoi (3, A, B, C) hanoi (2, A, C, B) hanoi (1, A, B, C) move (A, 2, B) hanoi (1, C, A, B) move (A, 3, C) hanoi (2, B, A, C) hanoi (1, B, C, A) move (B, 2, C) hanoi (1, A, B, C) A B C 2 1 3 困难! 函数的(嵌套)调用 main( )

文档评论(0)

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

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档