C 语言函数递归

递归

递归是进行函数调用本身的技术。这种技术提供了一种将复杂问题分解为更容易解决的简单问题的方法。

递归可能有点难以理解。弄清楚它是如何工作的最好方法就是用它进行实验。


递归实例

将两个数字相加很容易,但将一系列数字相加则更复杂。在下面的实例中,递归用于将一系列数字相加,方法是将其分解为两个数字相加的简单任务:

实例
  1. #include <stdio.h>
  2. int sum(int k);
  3. int main() {
  4. int result = sum(10);
  5. printf("%d", result);
  6. return 0;
  7. }
  8. int sum(int k) {
  9. if (k > 0) {
  10. return k + sum(k - 1);
  11. } else {
  12. return 0;
  13. }
  14. }
实例解释

调用 sum() 函数时,它会将参数 k 添加到比 k 小的所有数字的和中,并返回结果。当 k 变为 0 时,函数只返回 0。运行时,程序遵循以下步骤:

  1. 10 + sum(9)
  2. 10 + ( 9 + sum(8) )
  3. 10 + ( 9 + ( 8 + sum(7) ) )
  4. ...
  5. 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
  6. 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

由于函数在 k 为 0 时不调用自己,因此程序将停止并返回结果。

开发人员应该非常小心递归,因为编写一个永远不会终止的函数,或者编写一个使用过多内存或处理器能力的函数是非常容易的。然而,当编写正确时,递归可以是一种非常有效且数学上优雅的编程方法。