程序设计基础-12.pptVIP

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
12.3 递归与迭代 迭代算法实现 long int Fabonacci( int n ) { int i, f, f1 = 1, f2 = 1; if( n == 1 || n == 2 ) return 1; else for( i = 3; i = n; i++ ){ f = f1 + f2; f2 = f1; f1 = f; } return f; } 作 业 第360页:第三题(编程题) 第 7 小题 * 计算机程序设计基础 第十二章 递归程序设计 学习目标 了解递归可以简化复杂问题的编程实现 理解递归程序设计范型 理解函数递归调用的内部实现机制 熟悉典型递归程序的范例 能够编写简单的递归程序 12.1 递归问题的引入 递归的目的 简化复杂问题的手段:将问题逐步化简,在化简过程中保持原问题的性质不变,直到问题最简,可以轻易获得答案,然后将简化问题的答案组装成原始问题的解 递归示例 n! = 1 ? 2 ? 3 ? … ? n: n! = (n-1)! ? n; 0! = 1 xn = x ? x ? x ? … ? x: xn = xn-1 ? x; x0 = 1 递归函数示例一 阶乘的计算 long int CalFactorial( int n ){ long int result = 1; int i = 0; while( ++i = n ) result *= i; return result; } long int CalFactorial( int n ){ long int result; if( n == 0 || n = 1 ) result = 1; else result = n * CalFactorial( n – 1 ); return result; } 递归函数示例二 幂的计算 long double CalPower( long double x, int n ) { long double result; if( n == 0 ) result = 1; else result = x * CalPower( x, n – 1 ); return result; } 递归函数示例三 求整数的各位数字之和 int SumDigit( int n ) { if( n 10 ) return n; else return n % 10 + SumDigit( n / 10 ); } 递归过程的跟踪 阶乘的计算 #include stdio.h long int CalFactorial( int n ){ long int result; if( n == 0 || n = 1 ) result = 1; else result = n * CalFactorial( n – 1 ); return result; } void main(){ int num = 3; long int fac; fac = CalFactorial( num ); printf( “%ld”, fac ); } 递归过程的跟踪 main() 函数栈框架 递归过程的跟踪 第一次调用 CalFactorial() 函数栈框架 递归过程的跟踪 第二次调用 CalFactorial() 函数栈框架 递归过程的跟踪 第三次调用 CalFactorial() 执行后栈框架 递归过程的跟踪 第二次调用 CalFactorial() 执行后栈框架 递归过程的跟踪 第一次调用 CalFactorial() 执行后栈框架 递归过程的跟踪 控制流返回 main() 函数时的栈框架 递归信任与递归范型 理解递归问题的原则 不分析复杂细节而仅考虑单一层次上的操作 不要跟踪递归调用的栈框架! 基本递归假设 只要递归调用时的参数比原始参数在某种程度上更简单,则递归调用就一定能获得正确答案 递归心理学:这种简单递归调用一定正确工作的假设即为递归信任 12.2 典型递归程序 Hanoi 塔问题 假设有三个分别命名为 X、Y 和 Z 的塔座,在塔座 X 上插有 n 个直径大小不同、依小到大分别编号为1,2,…,n 的圆盘,如图所示。现要求将X 轴上的 n 个圆盘移动到塔座 Z 上并按相同顺序叠放,圆盘移动时必须遵循下述规则: 每次只能移动一个圆盘; 圆盘可以插在 X、Y 与 Z 中的任意塔座上 任何时刻都不能将较大的圆盘压在较小的圆盘上 如何实现移动圆盘的操作呢? Hanoi 塔问题 Hanoi 塔问题 递归算法的伪代码 void MoveHanoi

文档评论(0)

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

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

1亿VIP精品文档

相关文档