数据结构课件c语言描述第五章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课件c语言描述第五章

递归的概念 递归过程与递归工作栈 递归与回溯 广义表;递归的概念;定义是递归的;求解阶乘 n! 的过程;数据结构是递归的;搜索链表最后一个结点并打印其数值 template class Type void Print ( ListNodeType *f ) { if ( f -link == NULL ) cout f -data endl; else Print ( f -link ); };在链表中寻找等于给定值的结点并打印其数值 template class Type void Print ( ListNodeType *f, Type x ) { if ( f != NULL ) if ( f - data == x ) cout f - data endl; else Print ( f - link, x ); }; 问题的解法是递归的 例如,汉诺塔(Tower of Hanoi)问题的解法: 如果 n = 1,则将这一个盘子直接从 A 柱移到 C 柱上。否则,执行以下三步: ① 用 C 柱做过渡,将 A 柱上的 (n-1) 个盘子移到 B 柱上; ② 将 A 柱上最后一个盘子直接移到 C 柱上; ③ 用 A 柱做过渡,将 B 柱上的 (n-1) 个盘子移到 C 柱上。;;;(3,A,B,C);;构成递归的条件;;;函数递归时的活动记录; long Factorial ( long n ) { int temp; if ( n == 0 ) return 1; else temp = n * Factorial (n-1); RetLoc2 return temp; };计算Fact时活动记录的内容;递归过程改为非递归过程;计算斐波那契数列的函数Fib(n)的定义;调用次数 NumCall(k) = 2*Fib(k+1) - 1。;Fib(1);Fib(1);Fib(1);long Fibnacci ( long n ) { StackNode S; Node w; long sum = 0; //反复执行直到所有终端结点数据累加完 do { while ( n 1 ) { w.n = n; w.tag = 1; S.push ( w ); n--; } //向左递归到底, 边走边进栈 sum = sum + n; //执行求和 ; while ( !S.IsEmpty( ) ) { w = S.getTop( ); S.Pop( ); if ( w.tag == 1 ) { //改为向右递归 w.tag = 2; S.push ( w ); n = w.n – 2; //F(n)右侧为F(n-2) break; } } } while ( !S.IsEmpty( ) ); return sum; };单向递归用迭代法实现;void recfunc ( int A[ ], int n ) { if ( n = 0 ) { cout A[n] ?? ”; n--; recfunc ( A, n ); } };void sterfunc ( int A[ ], int n ) { //消除了尾递归的非递归函数 while ( n = 0 ) { cout value A[n] endl; n--; } } ;递归与回溯 常用于搜索过程;n皇后问题 在 n 行 n 列的国际象棋棋盘上,若两个皇后位于同一行、同一列、同一对角线上,则称为它们为互相攻击。n皇后问题是指找到这 n 个皇后的互不攻击的布局。;1#主对角线 3#主对角线 5#主对角线;解题思路;设置 4 个数组 col [n] :col[i] 标识第 i 列是否安放了皇后; md[2n-1]

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档