首页编程java编程java为什么尽量不能用递归,java递归的优点缺点

java为什么尽量不能用递归,java递归的优点缺点

编程之家2023-10-14106次浏览

这篇文章给大家聊聊关于java为什么尽量不能用递归,以及java递归的优点缺点对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

java为什么尽量不能用递归,java递归的优点缺点

java中递归的作用是什么为什么要用到递归

你的两个问题其实是一个问题,对吧。

递归的作用:递归算法可以解决一些通过递归定义的题目。

首先需要明白什么是递归定义的题目,通俗一点来说就是一个大问题中蕴含着小问题,而小问题同时又与大问题的结构相同,只是规模更小。

java为什么尽量不能用递归,java递归的优点缺点

比如n阶乘的定义可以理解为:

n!= n*(n-1)!

从上面不难看出(n-1)!就是比n!规模更小的问题,按照此方法不断分解下去,就能得到最初的一些基本的已知的数据。然后反过来就可以求出最终的结果了。

java为什么尽量不能用递归,java递归的优点缺点

n的阶乘算法如下:

private static int jieCheng(int n){

if(n== 1)

return 1;

else{

return n*jieCheng(n-1);

}

}

还有就是数据结构中二叉树的定义,也是递归定义的。因此二叉树的好多操作都是通过递归实现的。

用递归会使程序相当简洁。

java,递归在实际编程中,用到了吗

实际编程中,递归会用在部分函数里来处理问题,它占的比重很小很小,用了不会对资源造成浪费的,真正的String处理、不合理的对象创建才是造成资源浪费的主要原因。所以,放心用吧,没有问题,现在的机子得差到何种程度才会体现出因为递归的使用浪费了资源的?

为什么说递归效率低

对于递归,有人提到了两点:

(1)对栈的容量的压力。

(2)个别问题的递归解法,其算法的低效性。

这两个因素我简短点评下,

(1)对栈的容量压力:

通常递归的深度很大造成的。对于这一点当然应该有程序员编码时,来衡量和把握。win32中一个新建的线程,默认的栈通常在 1 MB大小。那么如果你的递归函数,深度很大,显然程序员应该对这种情况有预估,和对风险的避免。

这就和你选择,把内存分配在栈上还是堆上,会考虑到分配的内存大小的因素一样。

当然,如果在函数内分配很大的栈上空间,在函数体内定义一个很大的数组,这样不需要很深的深度,也会让栈溢出。这当然也是程序员自己应该控制的。

(2)个别问题的递归解法,算法的低效。

这个低效主要在于这个问题的算法本身。而不是在递归这种方法上。比如说求斐波那契的某一项,子问题会大量重复出现,会产生很多重复计算,这个是很多算法书上,是用来引导出动态规划或者查表法的。

这主要是算法本身的效率问题,而不是递归的问题。这一点是必须应该明确的。

(3)我们可以看到,在和树有关的算法中,经常会有递归函数。

例如,遍历文件夹,删除注册表的某一个 key(及其所有子key)。

尤其对一般树的前序,后序遍历,二叉树的中序遍历。

这主要原因是因为树的定义,就是“递归性”的:

树就是,某一个节点有多个子节点,每个子节点是一个树。

我们再此可以看到,递归的显著优点,是对解的描述的直观性,代码的简洁性。

java递归的优点缺点

递归好处:代码更简洁清晰,可读性更好

递归可读性好这一点,对于初学者可能会反对。实际上递归的代码更清晰,但是从学习的角度要理解递归真正发生的什么,是如何调用的,调用层次和路线,调用堆栈中保存了什么,可能是不容易。但是不可否认递归的代码更简洁。一般来说,一个人可能很容易的写出前中后序的二叉树遍历的递归算法,要写出相应的非递归算法就比较考验水平了,恐怕至少一半的人搞不定。所以说递归代码更简洁明了。

递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。

个人觉得:非必要时不递归

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

元彬电影 元彬电影作品什么事活跃性 java 为什么Java越来越火