资源描述:
《函数嵌套调用和递归调用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《C语言程序设计》学习内容:函数的嵌套调用和递归调用6.9函数的嵌套调用和递归调用引例编程函数求解:y=(x+y)2!然后调用函数求解(2+3)2!以及(3+4)2!要求:1、首先编写求和函数,求解x+y的和。2、编写函数求解(x+y)的平方(x+y)23、编写函数求解(x+y)2!main(){inta,b,c;scanf(“%d,%d”,&a,&b);jc(a,b);printf(“sumis%d",c);}intjc(intk,intj){intz,m,i,s=1;sum(k,j);pf(z);for(i=1;i<=m;i++)s=s*i;
2、returns;}intsum(intx,inty){return(x+y);}intpf(inth){return(h*h);}c=z=m=6.9.1函数的嵌套调用C语言中不允许嵌套的函数定义,各函数之间是平行的,不存在上一级函数和下一级函数的问题。voidprint(){putchar('*');voidprnline(intn){inti;for(i=0;i<=n;i++)putchar('');}}C语言允许在一个函数的定义中出现对另一个函数的调用(使用)。这样就出现了函数的嵌套调用,即在被使用函数中又调用其他函数。#include<
3、stdio.h>longsum(inta,intb);longfactorial(intn);main(){intn1,n2;longa;scanf("%d,%d",&n1,&n2);a=sum(n1,n2);printf("a=%1d",a);}longsum(inta,intb){longc1,c2;factorial(a);factorial(b);return(c1+c2);}longfactorial(intn){longrtn=1;inti;for(i=1;i<=n;i++)rtn*=i;return(rtn);}longsum(in
4、ta,intb);longfactorial(intn);文件包含编译预处理命令函数声明函数定义函数调用函数调用函数返回值形参实参c1=c2=longfactorial(intn){longrtn=1;inti;for(i=1;i<=n;i++)rtn*=i;return(rtn);}例2求三个数中最大数和最小数的差值#includeintdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%
5、d%d%d",&a,&b,&c);d=dif(a,b,c);printf("Max-Min=%d",d);}intmin(intx,inty,intz){intr;r=xy?x:y;return(r>z?r:z);}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}f(x+y)2x+y(x<=y)g(x,y)=f(x-y)2x+y(x>y)其中:f(t)=(1+e-t)/(1+e
6、t)求result=g(2.5,3.4)。练习练习例:编写求组合数的函数。6.9.2函数的递归调用递归:一个函数直接或间接地使用自身。1.直接递归调用:函数直接调用本身2.间接递归调用:函数间接调用本身intf(intx){inty,z;……z=f(y);…….return(2*z);}intf1(intx){inty,z;……z=f2(y);…….return(2*z);}intf2(intt){inta,c;……c=f1(a);…….return(3+c);}直接调用间接调用【例1】有5个人,第5个人说他比第4个人大2岁,第4个人说他对第3个
7、人大2岁,第3个人说他对第2个人大2岁,第2个人说他比第1个人大2岁,第1个人说他10岁。求第5个人多少岁。通过分析,设计递归函数如下: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(){intx;x=age(5);printf("%d",x);}程序如下:请看看单步运行的情况……age(5)c=age(4)+2;returnc;age(intn){in
8、tc;if(n==1)c=10;elsec=age(n-1)+2;returnc;}递归过程跟踪分析:age(4)c=age(3)+2;