递归有是否尾递归之分,如果是尾递归的话就不用考虑内存分配的问题。并且只要你递归的不深,适当的使用递归都不是问题,同时使用递归阅读起来还是容易理解一点。
递归也是一次方法调用,只不过调用的是本身这个方法,所以内存分配没什么特殊的,跟普通方法调用一样。
一般来说,每个递归算法都可以转化为递推算法。且递归层数有可能受到具体语言的限制,良好设计的递推算法应该比递归效率高(递推时你自己进行栈的管理,有可能节约若干内存,也有可能节约不必要的压栈和出栈操作)。每次递归调用也涉及到当前的局部变量、实际参数、返回地址等的压栈,有可能压入了不需要保存的无关变量。机器不知道你的方法内哪些东西是不需要保存的,只能全部保存。内存空间有栈空间和堆空间,每次调用的栈空间可能固定,但是堆空间就不一定了。
听说递归时,没调一次方法就会分配一次内存,比如一次需要分配x,那么调十次就是10x,是这样的吗?
个人感觉就是减少方法内的局部变量,尽量写成尾递归的形式,剩下的就交给编译器去优化了。递归比倒推循环什么的好用多了...