一、什么是递归函数
- 递归函数:函数中调用了自己的函数
- 递归函数不等于循环函数,
- 递归典型例子:用递归函数计算阶乘、求斐波那契数列
#include <stdio.h>
int main(void)
{
int a=5;
printf("%d的阶乘是:%d.\n",a,jiecheng(a));
return 0;
}
int jiecheng(int n)
{
if(n<1)
{
printf("n必须大于等于1.\n");
return -1;
}
if(n==1)
{
return 1;
}
else
{
return (n*jiecheng(n-1));
}
}
二、函数的递归调用原理
- 实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。
- 栈内存的大小是限制递归深度的重要因素。
三、使用递归函数的原则:收敛性、栈溢出
- 收敛性就是:递归函数必须有一个终止递归的条件。当每次函数被执行时,判断一个条件决定是否继续递归,这个条件最终必须能够被满足。如果没有递归终止条件或者这个条件永远不会被满足,则这个递归没有收敛性。
- 因为递归是占用栈内存的,必须在栈内存耗尽之间结束递归。否则就会栈溢出。
- 递归函数的使用具有一些风险,必须把握好终止条件。