原文: https://www.programiz.com/c-programming/c-recursion

在本教程中,您将借助示例学习使用 C 编程编写递归函数。

调用自身的函数称为递归函数。 并且,这种技术称为递归。


递归如何工作?

  1. void recurse()
  2. {
  3. ... .. ...
  4. recurse();
  5. ... .. ...
  6. }
  7. int main()
  8. {
  9. ... .. ...
  10. recurse();
  11. ... .. ...
  12. }

C 递归 - 图1

递归继续进行,直到满足某些条件以防止递归为止。

为了防止无限递归,可以在一个分支进行递归调用而另一分支不递归的情况下使用if...else语句(或类似方法)。


示例:使用递归的自然数之和

  1. #include <stdio.h>
  2. int sum(int n);
  3. int main() {
  4. int number, result;
  5. printf("Enter a positive integer: ");
  6. scanf("%d", &number);
  7. result = sum(number);
  8. printf("sum = %d", result);
  9. return 0;
  10. }
  11. int sum(int n) {
  12. if (n != 0)
  13. // sum() function calls itself
  14. return n + sum(n-1);
  15. else
  16. return n;
  17. }

输出

  1. Enter a positive integer:3
  2. sum = 6

最初,从main()函数调用sum(),并以number作为参数传递。

假设sum()内的n的值最初为 3。 在下一个函数调用期间,将 2 传递给sum()函数。 该过程一直持续到n等于 0。

n等于 0 时,if条件失败,并且执行else部分,最终将整数和返回给main()函数。

C 递归 - 图2


递归的优缺点

递归使程序优雅。 但是,如果性能至关重要,请使用循环代替,因为递归通常要慢得多。

话虽如此,递归是一个重要的概念。 它经常用于数据结构和算法中。 例如,在诸如树遍历的问题中通常使用递归。