美文网首页
慎用递归

慎用递归

作者: WorldPeace_hp | 来源:发表于2018-01-17 15:37 被阅读0次
  • 效率低
    递归效率低是函数调用的开销导致的。
    在一个函数调用之前需要做许多工作,比如准备函数内局部变量使用的空间、搞定函数的参数等等,这些事情每次调用函数都需要做。
    因此会产生额外开销导致递归效率偏低,所以逻辑上开销一致时递归的额外开销会多一些。

  • 栈溢出
    Java的内存分配主要是由堆和栈分配,堆是线程共有的内存空间,栈是线程私有的,栈的内存回收一般就是随着线程的生而生,亡而亡,递归的使用导致的问题恰好就是跟栈内存有关系的;当一个方法被调用的时候,会产生一些跟这个方法相关的信息,例如:方法名,参数,中间变量等等,这些东东是叫做栈帧的,当一个方法执行完毕的时候,这个栈帧才会从栈顶pop掉,使用递归的时候,会一直往栈内存里push栈帧,而java栈内存是有一定的大小限制的,超过栈内存大小的时候,程序就会出现栈异常的异常了。所以在正常的开发过程中尽量避免递归。

  • 简洁/清晰
    递归做为一种算法在程序设计语言中广泛应用。是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。
    给你个求阶乘的例子:

public long factorial(long n){//求n!
   if(n==0)return 1;
   else return n*factorial(n-1);//利用递归n!=n*(n-1)!直到0
}

相关文章

  • 慎用递归

    效率低:递归效率低是函数调用的开销导致的。在一个函数调用之前需要做许多工作,比如准备函数内局部变量使用的空间、搞定...

  • C语言算法核心——递归汉诺塔

    汉诺塔 用C小伙伴肯定都听过这样一句话:“能用不用递归就不用递归”,无数的前辈告诉我们,慎用指针和递归,但柳猫今天...

  • 安装CocoaPods过程和遇到各种坑(楼主亲测)

    初次使用简书写文章,格式略乱,轻喷~~~~ 网络不好慎用!!!! 网络不好慎用!!!! 网络不好慎用!!!! 1....

  • 操作符重载

    !慎用操作符重载

  • 三元运诀

    祖传手抄,请君慎用!

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • 附子不能升阳,慎用

    附子不能升阳,慎用 (待续)

  • 三元运诀

    祖传手抄,请君慎用之!

  • 二叉树的遍历

    先序递归: 非递归: 中序递归: 非递归: 后序递归: 非递归 层次遍历

  • 删除文件夹

    rm -r 我尼玛,这个要慎用!

网友评论

      本文标题:慎用递归

      本文链接:https://www.haomeiwen.com/subject/ieluoxtx.html