关于C语言的函数递归调用

70次阅读
没有评论

共计 708 个字符,预计需要花费 2 分钟才能阅读完成。

关于C语言的函数递归调用

C语言递归调用

1.定义

递归就是一个函数调用自身的过程。在递归中,函数通过直接或间接的方式调用自己,直到满足某个特定的条件也称基线条件时,停止递归。

例如计算 1+2+3+…n=?

  • 问题可以分解为:sum(n) = n + sum(n – 1)
  • 当进程的 n = 0 或 n = 1 时,返回结果。

2.两个关键部分

  1. 基线条件(Base Case):
    • 基线条件就是递归最终终止的条件。
    • 基线条件的意义是定义不再调用自身的最小问题规模,以输出最终结果。
    • 若没有基线条件,递归就会陷入无限循环,最终导致程序崩溃。
  2. 递归关系(Recursive Case)
    • 是一个公式或逻辑,它定义了如何将一个问题的解与其更小规模的子问题的解关联起来。
    • 递归关系的目的在于通过不断缩小问题规模,将问题分解成更小的子问题,最终达到基线条件。

示例:求1+2+3+…+n的值的求和函数sum(n)

int sum(int n)
{
   if(n == 1)
   {
      return 1;      //基线条件
   }
   else
   {
      return (n + sum(n - 1));   //递归关系
   }
}

3.递归调用的过程

sum(3)为例:

int result = sum(3);

调用过程:

  1. sum(3)调用sum(2)
    • sum(2)还没有结果,所以sum(3)保持未完成状态。
  2. sum(2)调用sum(1)
    • sum(1)还没有结果,所以sum(2)保持未完成状态。
  3. sum(1)到达最小值,也就是基线条件,返回值1。
  4. sum(2)得到sum(1)的值1,返回2+1=3。
  5. sum(3)得到sum(2)的值3,返回3+3=6。

递归调用过程结束,最终得到值6。在上面的过程中第1、2步只是向下调取结果值,第3步到达基线条件,开始返回结果值,第4、5步也是不断向上返回结果值的过程。

正文完
 0
评论(没有评论)