2020-11-03 10:16:51 卢浮宫 版权声明:本文为站长原创文章,转载请写明出处
1.1、开个玩笑。我们在程序开发时或多或少都会使用到递归函数,说起递归我们都会有一个第一印象:自己调用自己!
1.2、我们来看来自于百度的普通说明:
一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称之为递归。用递归过程定义的函数称之为递归函数,如:连加、连乘、阶乘等。
古典递归函数,是一种定义在自然数集合上的函数,它的未知值往往要通过有限次运算回归到已知值来求出,故称为“递归”。它是古典递归函数论的研究对象 [1] 。
优:
① 定义简单,自己调用自己即可。(我调我自己!)
② 逻辑清晰,每一次的重复调用执行的参数,或逻辑相似。
缺:
① 使用条件严谨,包括但不限于:参数、逻辑处理、返回值等。
② 需要定义递归出口以防止深度无法处理
③ JVM在每次进入时都要在栈内存中分配空间以保存相关参数、变量、返回值信息。
④ 调试、后期维护、业务变更处理会带来一定困扰。
PS: 有说递归效率低,其实这个效率差在实际操作中并无太大差别。
另外也可以使用尾递归来对递归函数进行优化。
3.1、综上我们可以得出:在逻辑清晰,高度相似性的处理中我们可以使用递归。
3.2、使用递归要处理好递归出口,不然就是无限调用。
3.3、递归函数在深度上没有很好处理的话会导致栈溢出。
3.4、简言之:在特定的情况下处理好递归出口并且做好代码处理使用是没问题的。
但往往上述几点可能会因为没有得到很好的处理导致你写的是一个臭虫。
4.1、递归出口得不到控制时,导致栈溢出