网站大量收购独家精品文档,联系QQ:2885784924

c语言课件第7章2.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言课件第7章2

* * 下面用非递归和递归两种方式编制计算阶乘的程序 函数的递归调用 在调用一个函数的过程中又出现直接或间接的调用函数本身,称为函数的递归调用。 fact(int n) { int answer,j; answer=1; for(j=1;j=n;j++) answer *=j; return(answer); } main() { int n; scanf(%d,n); printf(%d!=%d\n,n,fact(n)); } fact(int n) {int answer; if(n==0) return(1); /*递归结束条 件 */ answer=fact(n-1)*n;/* 递归调用*/ return(answer); } main() {int n; scanf(%d,n); printf(%d!=%d\n,n,fact(n)); } 1.什么是递归? 递归是在连续执行某一处理过程时,该过程中的某一步要用到它自身的上一步(或上几步)的结果。在一个程序中,若存在程序自己调用自己的现象就构成了递归。 2.递归调用过程: n=4 4!=4×3!=4×3×2!=4×3×2×1!=4×3×2×1×0! ? 递 推 过 程? 4!=24?4×6=24?3×2=6?2×1=2?1×1=1(0!=1) 回 归 过 程 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,又说比第1个人大2岁。最后问第1个人岁数,他说是10岁。请问第5个人多大? 分析: age(5)=age(4)+2?age(4)=age(3)+2?age(3)=age(2)+2? age(2)=age(1)+2?age(1)=10 age(5)=18?age(4)=16?age(3)=14?age(2)=12 age(int n) {int c; if(n==1) c=10; /*递归结束条件 */ else c=age(n-1)+2; return(c); } main() {int n; printf(Enter input number:\n); scanf(%d,n); printf(The %dth mans age is: %d\n,n,age(n)); } 4.递归程序与非递归程序间的关系 所有的递归问题都一定可用非递归的算法实现。 3.编写递归程序要点 (11)找出正确的递归算法 ( 2)确定算法的递归结束条件 问题:① 该程序的输出结果是: ② 若删去注有/* to be deleted */的语句,则程序的输出结果为: 程序 void recursive(char c) { printf(%c,c); /* to be deleted */ if (c5) recursive(c+1); printf(%c,c); } main() { recursive(0);} 012345543210 543210 main函数 recursive(0) void recursive(1) printf(%c,c); if(c5)recursive(c+1); printf(%c,c); } …… void recursive(0) printf(%c,c); if(c5)recursive(c+1); printf(%c,c); } c=0 c=1 c=5 递归调用图示 void recursive(char c) { printf(%c,c); /* to be deleted */ if (c5) recursive(c+1); printf(%c,c); } main() { recursive(0);} void recursive(5) printf(%c,c); if(c5)recursive(c+1); printf(%c,c); } ******写程序结果 *********** void f(int b,int t) { int m; if (bt) { m=(b+t)/2; printf(“%d\n”,m); f(b,m-1); f(m+1,t); } } main() { f(1,6); } 输出的第一行是 3 ,第二行是

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档