c语言程序设计第7章函数ppt课件.ppt

c语言程序设计第7章函数ppt课件.ppt

ID:58885908

大小:299.50 KB

页数:63页

时间:2020-09-30

c语言程序设计第7章函数ppt课件.ppt_第1页
c语言程序设计第7章函数ppt课件.ppt_第2页
c语言程序设计第7章函数ppt课件.ppt_第3页
c语言程序设计第7章函数ppt课件.ppt_第4页
c语言程序设计第7章函数ppt课件.ppt_第5页
资源描述:

《c语言程序设计第7章函数ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言程序设计第7章函数(2)7.5函数的嵌套调用C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。main(){…x=add(a,b);…}floatmul(floatx1){return(x1*x1);}floatadd(floatx1,floatx2){y1=x1+mul(x2);returny1;}函数的嵌套调用x=a+b*b7.6函数的递归调用1、递归的概念直接递归调用调用函数的过程中又调用该函数本身间接递归调用调

2、用f1函数的过程中调用f2函数,而f2中又需要调用f1。以上均为无终止递归调用。为此,一般要用if语句来控制使递归过程到某一条件满足时结束。四、函数的递归调用2、递归算法类似于数学证明中的反推法,从后一结果与前一结果的关系中寻找其规律性。归纳法可以分为:递推法从初值出发,归纳出新值与旧值间直到最后值为止的关系。要求通过分析得到:初值+递推公式编程:通过循环控制结构实现(循环的终值是最后值)递归法从结果出发,归纳出后一结果与前一结果直到初值为止的关系。要求通过分析得到:初值+递归函数编程:设计一个函数(递归函数),这个函数不断使用下一级值调用自身,直到结果已知处——选择控制结

3、构。四、函数的递归调用2、递归算法其一般形式是:在主函数中用终值n调用递归函数,而在递归函数中:递归函数名f(参数x){if(n==初值)结果=…;else结果=含f(x-1)的表达式;返回结果(return);}f(x){f(x-1)}main(){f(n)…}f(x-1){f(x-2)}f(x-2){f(x-3)}f(x0){f(x0==…)}【例7.6】有5个人,第5个人说他比第4个人大2岁,第4个人说他对第3个人大2岁,第3个人说他对第2个人大2岁,第2个人说他比第1个人大2岁,第1个人说他10岁。求第5个人多少岁。age(5)=age(4)+2age(4)=age

4、(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10可以用数学公式表述如下:通过分析,设计递归函数如下:10(n=1)age(n)=age(n-1)+2(n>1)递归函数原型:10(n=1)age(n)=age(n-1)+2(n>1)age(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;returnc;}main(){printf("%d",age(5));}程序如下:请看看单步运行的情况……age(5)c=age(4)+2;returnc;age(intn){intc;if(n==1)c=10;els

5、ec=age(n-1)+2;returnc;}递归过程跟踪分析:age(4)c=age(3)+2;returnc;age(3)c=age(2)+2;returnc;age(2)c=age(1)+2;returnc;age(1)c=10returnc;c=10c=12c=14c=16c=18【例7.7】用递归法求n! 分析比较:实际上,递归程序分两个阶段执行——①回推(调用):欲求n!→先求(n-1)!→(n-2)!→…→1!若1!已知,回推结束。②递推(回代):知道1!→2!可求出→3!→…→n!阶乘的递推算法:对于一个非负整数,它的阶乘是以下表达式的结果:n!=1*2··

6、·····*(n-3)*(n-2)*(n-1)*nn!=n*(n-1)*(n-2)*(n-3)*·······*2*1递推(或称迭代法)算法例如5的阶乘:5!=5*4*3*2*1for(i=1,result=1;i<=5;i++)result*=i;阶乘的递推算法示例:#defineN10#include"stdio.h"voidmain(){inti,result;printf("%d!=",N);for(i=1,result=1;i<=N;i++){printf("%d",i);result*=i;if(i

7、ult);}阶乘的递归算法:n!=n*(n-1)*(n-2)*(n-3)*·······*1递归算法例如5的阶乘:5!=5*(4*3*2*1)=5*4!4!=4*(3*2*1)=4*3!3!=3*(2*1)=3*2!2!=2*1=2*1!1!=1阶乘的递归算法示例:#include"stdio.h"longfac(intn){longc;if(n==0

8、

9、n==1)c=1;elsec=n*fac(n-1);returnc;}main(){longn,s;printf("Inputn=");scanf("%d",&n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。