C语言:函数的递归调用
程序员文章站
2022-03-17 13:04:15
...
函数的递归调用:一个函数在它的函数体内,直接或者间接地调用了他本身。
直接递归调用:函数直接调用自身。 间接递归调用:函数间接调用自身。
如下图: 如下图:
防止递归无休止的进行下去,必须在函数内加条件判断,满足条件后就不再做递归调用,然后逐层返回。
通过一个例子来了解函数的递归调用
例:求第五个学生的年龄。
问第五个学生,说他比第四个学生大两岁
第四个学生说他比第三个学生大两岁
第三个学生说他比第二个学生大两岁
第二个学生说他比第一个学生大两岁
第一个说他10岁
解:
可以用如下方法求解
#include<stdio.h>
int Age (int n)
{
int tmp;
tmp=10;
for(int i=1;i<n;i++)
{
tmp+=2;
}
return tmp;
}
*/
//递归法
int Age(int n)
{
int x;
if(n==1) //是递归停止的条件,当n=1时停止递归调用
{
x=10;
}
else
{
x=Age(n-1)+2;//调用自身的Age函数
return x;
}
//return (Age(n-1)+2);
}
int main()
{
printf("%d\n",Age(5));
return 0;
}
可知:Age函数被调用了四次。在函数内部的调用,一个函数调用一个函数,直到n为1时为止,所以最后要加的值是8,然后返回最终的值。
函数的递归调用,就是函数本身调用自己。但是应用递归调用的时候,我们有必要设置一个条件,也就是if语句,目的是能够让这个函数停下来,否则程序将进入到死循环。
最适合使用递归法解决的问题
汉诺塔问题(Hanoi) (见下一篇博客)
最不适合使用递归法解决的问题
斐波那契数列(Fibon)