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