递归函数

一、什么是递归函数

  • 递归函数:函数中调用了自己的函数
  • 递归函数不等于循环函数,
  • 递归典型例子:用递归函数计算阶乘、求斐波那契数列
#include 
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));
        }
}

二、函数的递归调用原理

  • 实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。
  • 栈内存的大小是限制递归深度的重要因素。

三、使用递归函数的原则:收敛性、栈溢出

  • 收敛性就是:递归函数必须有一个终止递归的条件。当每次函数被执行时,判断一个条件决定是否继续递归,这个条件最终必须能够被满足。如果没有递归终止条件或者这个条件永远不会被满足,则这个递归没有收敛性。
  • 因为递归是占用栈内存的,必须在栈内存耗尽之间结束递归。否则就会栈溢出。
  • 递归函数的使用具有一些风险,必须把握好终止条件。

你可能感兴趣的:(递归函数)