1.简介

递归:在程序运行过程中,自己调用自己的一种编程技巧。

递归特点:

  • 必须有一个终止条件或者出口,否则就会出现死循环,导致程序无法跳出当前操作。
  • 源问题必须能拆分为同样操作的子问题,一层层拆分,最终子问题要能满足终止条件。

递归缺点:
1)每次调用自身,都需要进行入系统栈的操作,当递归深度过深时,容易引发栈溢出。
2)每次调用自身,系统栈需要重新分配保存局部变量、形参、调用函数地址、返回值等内容,有一定的性能开销。

递归优点:
1)代码比较简洁、清晰。
2)解决用循环迭代不好处理的问题, 如Hanoi。

2.故事

能看到这的朋友,恭喜你还在递归的魔爪中挣扎,想寻求一种解脱。作为理科生,总想着要把递归的原理,执行步骤等等弄清,所以开始你对简单的递归一遍遍的调试,深陷旋涡之中无法自拔,一番折腾,似乎茅塞顿开,直到有一天你看到递归函数写在了For循环里,而且循环里有两个或多个递归函数。小意思,待我调试一番,一层for循环下来你发现调试中高亮的代码行可能是假的,这尼玛怎么能乱跳呢?调试多线程都没这么费劲(严肃脸),经历过上述精彩故事的朋友,请往下看。