慎用递归

  • 效率低
    递归效率低是函数调用的开销导致的。
    在一个函数调用之前需要做许多工作,比如准备函数内局部变量使用的空间、搞定函数的参数等等,这些事情每次调用函数都需要做。
    因此会产生额外开销导致递归效率偏低,所以逻辑上开销一致时递归的额外开销会多一些。

  • 栈溢出
    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
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容