嵌套调用
在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数。
执行过程:
1,执行main函数的开头部分;
2,遇函数调用语句,调用函数a,流程转去a函数;
3,执行a函数的开头部分;
4,遇函数调用语句,调用函数b,流程转去函数b;
5,执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;
6,返回到a函数中调用b函数的位置;
7,继续执行a函数中尚未执行的部分,直到a函数结束;
8,返回main函数中调用a函数的位置;
9,继续执行main函数的剩余部分直到结束。
例:输入4个整数,找出其中的最大的数。用函数的嵌套调用来处理。
#include <stdio.h>
int main()
{
int max4(int a,int b,int c,int d); //对max4的函数声明
int a,b,c,d,max;
printf("please enter 4 interger numbers:");//提示输入4个数
scanf("%d %d %d %d",&a,&b,&c,&d); //输入4个数
max=max4(a,b,c,d); //调用max4函数,得到4个数中的最大值
printf("max=%d\n",max); //输出最大值
return 0;
}
int max4(int a,int b,int c,int d) //定义max4函数
{
int max2(int a,int b); //对max2的函数声明
int m;
m=max2(a,b); //调用max2函数,得到a和b中的大者,放在m中
m=max2(m,c);
m=max2(m,d);
return(m);
}
int max2(int a,int b) //定义max2函数
{
if(a>=b)
return a; //若a>=b,将a作为函数返回值
else
return b; //若a<b,将b作为函数返回值
}
递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
例:
int f(int x)
{
int y,z;
z=f(y); //在执行f函数的过程中又要调用f函数
return(2*z);
}
例:用递归方法求n!。
int main()
{
int fac(int n); //fac函数声明
int n;
int y;
printf("input an interger number:");
scanf("%d",&n); //输入要求阶乘的数
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int n) //定义fac函数
{
int f;
if(n<0) //n不能小于0
printf("n<0,data error!");
else if(n==0||n==1) //n=0或,1时n!=1
f=1;
else f=fac(n-1)*n; //n>1时,n!=n*(n-1)
return(f);
}