在调用一个函数的过程中又出现直接或间接的调用该函数本身,
称为函数的递归调用。
如:
int f(int x)
{
int y,z;
z=f(y);
return (2*z);
}
这里是再调用函数f时,其内部有一次调用了f函数,这五个就是直接调用本函数。
这张图里的第一个就是直接调用,第二个是间接调用。
这两种递归调用都是无终止的自身调用。
为了出现有限次的调用,我们使用if语句来控制。
只有在某一条件成立时,才能进行调用。
有点循环语句的特点。
我们来看一个程序:
有5个学生坐在一起,问第五个学生的年龄。
他说比第四个学生大两岁,
第四个学生比第三个学生大两岁,
第三个学生比第二个学生大两岁,
第二个学生比第一个学生大两岁,
第一个学生10岁。
这个就是一个递归。
#include <stdio.h>
int main()
{
int age(int n);
printf("第五个学生的岁数是:%d\n", age(5));
return 0;
}
int age(int n)
{
int c;
if (n == 1)
c = 10;
else
c = age(n - 1) + 2;
return(c);
}
age函数进行了递归。
我们再来看一个程序:
用递归来求n!
#include <stdio.h>
int main()
{
int a(int n);
int n;
int y;
scanf("%d", &n);
y = a(n);
printf("%d!=%d\n", n, y);
return 0;
}
int a(int n)
{
int f;
if (n < 0)
printf("n<0,data error!");
else if (n == 0 || n == 1)
f = 1;
else f = a(n - 1) * n;
return (f);
}
在这个程序里面,主要是函数部分的定义
考虑了所有的情况,首先是n的正负,附属不要
其次是n为0和1时的取值。
if语句很重要。
当然,这个值最多求导12!,因为int类型的存储单元有限,更大的结果就不准确,上面的20!结果就不准确。
本篇内容到此结束。