ch5模块化程序设计 C语言 《解析C程序设计》.pptVIP

ch5模块化程序设计 C语言 《解析C程序设计》.ppt

  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文档。上传文档
查看更多
ch5模块化程序设计 C语言 《解析C程序设计》

3. 递归形式的与或结点图为 求Jump(3,4) S==0 Jump(S,y) y+1 S!=0 Jump(S-1,y) 2*Jump(S-1,y) S==0 Jump(3,4) 4+1 3!=0 A=Jump(2,4) 2*A 2*20=40 B=Jump(1,4) 2*B 2*10=20 2!=0 C=Jump(0,4) 2*C 2*5=10 1!=0 40 // * 主要功能:青蛙过河 #include stdio.h int Jump(int, int); //声明有被调用函数 int main() { int S=0,y=0,sum=0; //s为河中石柱数,y为荷叶数 scanf(“%d”,S); scanf(“%d”, y); sum = Jump ( S , y ) ; //最多可跳过河的青蛙数 printf(Jump(%d,%d)=%d\n,S,y,sum); return 0; } int Jump ( int r, int z ) { int k=0; if (r==0) k = z + 1; //直接可解结点, k 值为 z + 1 else k=2*Jump(r-1,z); //要调用Jump( r-1, z ) return k;  } 练习 将十进制数转换成2进制数输出(递归实现) 十进制与二进制的相互转换 屏幕显示菜单(提示),用户选择: 1: 十 ? 二 2: 二 ? 十 * 云南师范大学 云南师范大学 云南师范大学 云南师范大学 计算机科学与信息技术学院 解敏 xmin7186@ 程序设计导引 2007.9 — 2008.1 云南师范大学 云南师范大学 第5章 模块化程序设计 本章要点 函数的嵌套调用 递归求n! 递归求Fibonacii数列(自学p144) Hanoi塔, 青蛙过河 计算ex(自学p152) 输入年份,输出日历(p153) 练习 函数可以嵌套调用,但不能嵌套定义 main() { ... f1(); ... } f1() { ... f2(); ... f3(); ... } f2() { ... } f3() { ... } f4() { ... f5(); ... } f5() { ... } 求n!(递归实现) 递归法的思想 n! 递归 调用与返回 n 程序实现 “与结点” 表达递归 fact() 递归与递推 递推:从已知的初始条件出发,由递推公式逐次求所需要的 如求 3!  初始条件 : 递归:从所求的未知项出发逐次调用本身的求解过程(递归函数),直到递归的边界(即初始条件) 递归算法比较符合人的思维方式,逻辑性强,可将问题描述得简单扼要,具有良好的可读性,易于理解 递归的常见应用:有哪些信誉好的足球投注网站,排序,任务分析 递归通常适合于一些可以分成许多更小问题的问题。如果这些“更小”问题差异很大时,迭代(递推)可能比递归更有用 直接或间接调用自己的函数 思路 A: 能够直接处理的部分 B: 暂时不能直接处理,但与原问题相似(递归调用),且规模缩小(参数变化趋向于能够直接处理的部分) 递归函数 与结点 :表达递归算法 A 的最终取值为 C 结点的值,但为了求得 C 的值,得先求出 B 结点的值, C 是B 的函数。 与结点有多个相关联的点 A B C A B ... D C 求“n ! “ 的与或图 求3! A B C fact(n) n==1 1 D E n*fact(n-1) fact(n-1) n1 A B E fact(3) n==1 31 fact(2) 21 3*fact(2) C fact(1) 1 2*fact(1) D 2*1=2 3*2=6 6 #includestdio.h //递归法求n! int fact(int n); //函数说明 int main() //主函数 { int n;   scanf(“%d”,n);   printf(“\t%d!=%d\n”,n, fact(n) ); //函数调用   return 0; } int fact(int n)  //递归法求n! { int result;   if(n==1 || n==0) result=1;  //递归出口   else result=n* fact(n-1) ;  //递归调用   return result; //返回主调函数 } 递归调用与返回 真 假 1==1 result=1 返回result 函数fa

文档评论(0)

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

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

1亿VIP精品文档

相关文档