C++ 递归

递归

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

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


递归实例

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

实例
  1. #include <iostream>
  2. using namespace std;
  3. int sum(int k) {
  4. if (k > 0) {
  5. return k + sum(k - 1);
  6. } else {
  7. return 0;
  8. }
  9. }
  10. int main() {
  11. int result = sum(10);
  12. cout << result;
  13. return 0;
  14. }
实例解释

当调用 sum() 函数时,sum() 返回的值小于所有 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 时不调用自身,因此程序会在那里停止并返回结果。

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