一、函数的递归调用
C语言课程中,调用函数和被调用的函数可以是不用的,那么当然相同的也是可以的,C语言中允许一个函数调用它自身。例如我们求水仙花数,或者从1遍历到100,函数不停的循环被调用,那么哦我们就可以将这个函数称为递归函数。函数的递 归调用是函数嵌套调用的一种特殊形式。其定义形式如下:
int f(int x)
{
int y,z;
z=f(y);
return(2*z);
}
我们看一道递归运用的经典例题:
有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大。
age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10
可以用数学公式表述如下: age(n)=10 (n=1) age(n-1)+2 (n>1)
可以用一个函数来描述上述递归过程:
int age(int n) /*求年龄的递归函数*/
{ int c; /* c用作存放函数的返回值的变量 */
if(n==1) c=10;
else c=age(n-1)+2;
return(c);
}
用一个主函数调用age函数,求得第5人的年龄。
#include <stdio.h>
void main()
{
printf(″ %d ″,age(5));
}
运行结果如下: 18
当然,递归其实是需要模板的,我们只需要掌握一些常用的递归模板即可:
可以用下面的递归公式计算n!:
//FileName: chap5_8.c
#include<stdio.h>
long factorial(int n);
int main()
{
long result;
int n;
printf("Please input the value of n: ");
scanf("%d", &n);
result=factorial(n);
printf("%d! = %ld\n", n, result);
return 0;
}
long factorial(int n) //递归函数定义
{
long s;
if(n == 0) //递归出口
s=1;
else
s= factorial(n - 1) * n; //递归调用
return s;
}
程序运行结果如下: Please input the value of n:3↙ 3!=6