- 0
- 0
- 约1.09万字
- 约 73页
- 2019-09-06 发布于广东
- 举报
在一个函数中调用另一个函数称为函数的嵌套调用。 注意:函数的定义不能嵌套,但是调用是可以嵌套的。 9.5 函数的嵌套调用 #include stdio.h int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z); main() {int a,b,c,d; scanf(%d%d%d,a,b,c); printf(Max-Min=%d\n, dif(a,b,c););} int dif(int x,int y,int z) {return max(x,y,z)-min(x,y,z);} int max(int x,int y,int z) {int r; r=xy?x:y; return(rz?r:z);} int min(int x,int y,int z) {int r; r=xy?x:y; return(rz?r:z);} 例:输入三个数,求最大数与最小数之差。 函数在执行过程中调用自身或两个函数相互调用 9.6 函数的递归调用 int f(int x) { int y,z; …… z=f(y); ……. return(2*z); } int f1(int x) { int y,z; …… z=f2(y); ……. return(2*z); } int f2(int t) { int a,c; …… c=f1(a); ……. return(3+c); } 函数调用函数本身,称为函数的递归调用。 递归调用形式如下: 为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。 9.6 函数的递归调用 直接递归 void a( ) {...… a ( ); ...… } 间接递归 void a( ) { ...… b ( ); ...… } void b( ) { a ( ); } 递归函数体 if (条件) 表达式 else 递推表达式; 例:用递归方法求5!。 9.6 函数的递归调用 5! 4! 5 * 3! 4 * 2! 3 * 1! 2 * 1 fact(5) fact(4) 5 * fact(3) 4 * fact(2) 3 * fact(1) 2 * 1 调 用 返 回 1 2 6 24 120 例:用递归方法求5! long fac(int n) {long f; if(n0) {printf(n0,dataerror!);f=-1;} else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f); } main() {int n=5; long y; y=fac(n); printf(%d!=%ld,n,y); } 例 hanoi(汉诺)塔问题。 底座上有三根针,第一根针上放着从大到小64个盘子。游戏的目标是把所有盘子从第一根针通过第二根针移到第三根针上。移动过程中大的盘子不能压在小的盘子上。 把n(n1)个盘子从第一根针a上移到第三根针c的问题分解成如下步骤: 将n-1个盘子从a经过c 移动到b。 将第n个盘子移动到c。 再将n-1个盘子从b经过a移动到c。 9.6 函数的递归调用 9.6 函数的递归调用 void move(char x , char y) { printf(%c%c\n,x,y); } void hanoi(int n,char one,char two,char three) {if (n==0) return; if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } main() {int m; printf(Input the number of disks:); scanf(%d,m); printf(The steps to moving %3d disks:\n,m); hanoi(m,A,B,C); } 数组元素作函数实参 数组
原创力文档

文档评论(0)