函数的调用可谓函数的重头戏,调用可分为:
- 嵌套调用
- 递归调用
一、嵌套调用
函数不能嵌套定义,但可以嵌套调用,也就是一个函数定义或者调用的过程中,允许另一个函数的调用。这里写一个最大值减去最小值作解析:
#include<stdio.h>
int max(int x,int y,int z)
{
int t;
t=x>y?x:y;
return (t>z?t:z);
}
int min (int x,int y, int z)
{
int c;
c=x<y?x:y;
return (c<z?c:z);
}
int reduce (int x,int y,int z)
{
return(max (x,y,z)-min (x,y,z));
}
int main ()
{
int a,b,c,result;
scanf("%d %d %d",&a,&b,&c);
result=reduce (a,b,c);
printf("最大值减去最小值的结果为%d",result);
}
这里,作相差函数时调用最大值函数与最小值函数,且主函数调用差函数结果。
二、递归调用
递归调用是一种特殊的调用,即自己调用自己,但本质上与调用其他函数相同。
常见的递归就是类似于在数学数列里多见,如阶乘、等比,等差数列求和等等。可以看出:递归的思想就是逐项分解F(n),F(n-1)…,再合并。
这里写一个n阶乘N! 作为解析:
#include<stdio.h>
int f(int n)
{
if (n<0)
return -1;
else if (n==0||n==1)
return 1;
else
return (n*f(n-1));
}
int main ()
{
int n;
scanf ("%d",&n);
printf("%d的阶乘为%d",n,f(n));
}
注意的是:这里的递归公式是在return后,返回一个确定的值再带入。如果不返回一个确定值,递归是不会停止的。即f(6)=6*f(5)
,为了求得结果,必须先调用得出f(5)
,即第一次调用,调用f(5)
时,实参为5,形参也为5,不会变成0或1,调用会继续即f(5)=5*f(4)
,以此类推。
数组名作函数参数,传递的是数组首元素的地址。
以上就是我对两种调用的初步解释,如有补充,评论区欢迎指出~