草庐IT

RECURSION

全部标签

java - 是否有可能在 Java 8 中创建一个无限增长的惰性集合,由递归定义?

我可以创建一个递归闭包:staticIntUnaryOperatorfibo;fibo=(i)->i当然,它仅作为示例有意义。为了有用,这样的集合应该保留已经计算过一次的元素,并在不重新计算的情况下获取()它们。元素的计数应该以懒惰的方式发生,首先需要。因此,任何成员都必须计算一次以上。通过这种方式,我们将得到一个看起来像递归定义的序列的结构,并且速度快且可重用。当我开始学习Java8时,我认为Stream就是这样工作的。但事实并非如此,因为流不能被使用两次。我想到了以下构造:IntStreamfi;fi=IntStream.iterate(0,i->fi[i-1]+fi[i-2]);

java - 始终避免 Java 中的递归方法?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我记得应该始终避免在Java中使用递归方法调用。我认为原因是,通过将调用的方法保存在堆上产生的开销不值得在实现中减少代码行数。但是,最近有人告诉我这不是真的,如果递归实现很好地捕获了问题空间的话。我没有完全理解这一点,因为每个递归方法都可以迭代实现,例如通过使用堆栈。有几个问题可以通过使用递归实现来解决,例如遍历树数据结构。在Java中应该始终避免递归实

java - 递归 - 为什么要使用 return 语句

我正在学习递归,下面是一个我正在跟踪以更好地理解它的示例publicstaticvoidmain(String[]args){newTestRecursion().strRecur("abc");}publicvoidstrRecur(Strings){if(s.length()以下是我目前的理解。-在第一次调用strRecur("abc")时,该方法被添加到执行堆栈。由于带有参数“abc*”的递归调用,它在暂停之前打印“abc”。第二次调用“abc*”,将方法strRecur(abc*)压入堆栈并向控制台打印“abc*”。第三次调用“abc**”,将方法strRecur(abc**)

java - 如何在 Java 中实例化通用递归类

我的问题是我使用的不是我开发的类(我从MicrosoftAzureSDKforJava获取它)。该类称为Node,您可以看到它here.如您所见,该类是一个递归声明的泛型类,如下所示:publicclassNode>{...}当我尝试实例化它时,我不知道该怎么做。我正在这样做,但我知道这不是办法,因为它没有尽头:Node>>>myNode=newNode>>>;希望您能理解我的问题。谢谢。 最佳答案 一种方法是像这样扩展Node:classMyNodeextendsNode>{}然后像这样实例化它:Node>node1=newMyN

java - StackOverflowError 什么时候发生?

这个问题在这里已经有了答案:Whatisthemaximumdepthofthejavacallstack?(5个答案)关闭9年前。根据Oracle,一个StackOverflowError是:Thrownwhenastackoverflowoccursbecauseanapplicationrecursestoodeeply.我知道什么是递归,通常递归函数如果没有正确终止,就会导致StackOverflowError。为了检查在StackOverflowError被抛出之前发生的递归调用的数量,我写了这段代码:packageErrorCases;publicclassStackOve

java - 多次返回的递归混淆

我仍然在思考递归,我想我已经掌握了一些基本的东西,比如阶乘。但是当return语句像下面的代码片段一样有点复杂时,我想进一步澄清:/***@paramn>=0*@returnthenthFibonaccinumber*/publicstaticintfibonacci(intn){if(n==0||n==1){return1;//basecases}else{returnfibonacci(n-1)+fibonacci(n-2);//recursivestep}}在return语句中,fibonacci(n-1)是否完全重复,然后再进入fibonacci(n-2)步骤(这有意义吗)?如

java - 遍历数组列表

我有一个看起来像这样的设置:Listlist=newLinkedList();list.add(newint[]{1,3,4});list.add(newint[]{4,5});list.add(newint[]{1,4,6});我在编写代码时不知道数组的大小。我正在尝试遍历整个设置以生成所有可能的组合:141144146151154156341...我目前正在使用递归来实现这一点:publicstaticvoidrecursive(Listlist){recursive(list,0,"");}privatestaticvoidrecursive(Listlist,intcounte

java - 在二叉树中找到一个值避免计算器异常

我试图在二叉树中找到一个值并返回具有我要查找的值的节点。我做了一个算法,当值不在树的很深层次时效果很好,但是当值在很深的位置时,我得到一个java.lang.StackOverflowError。这是我的代码:classNope{Nopeleft,right;intvalue;publicNopefind(intv){if(v>this.value&&this.right!=null)returnright.find(v);if(v任何人都可以建议我解决这个问题(我听说过尾优化递归之类的东西)但我不确定它是否适用于Java。 最佳答案

java - 使用递归查找数组中的最大值

对于我被要求解决的其中一个问题,我使用for循环找到了数组的最大值,所以我尝试使用递归找到它,这就是我想出的:publicstaticintfindMax(int[]a,inthead,intlast){intmax=0;if(head==last){returna[head];}elseif(a[head]所以它工作正常并获得最大值,但我的问题是:对于基本情况返回a[head]以及当头部的值大于最后的值的情况是否可以? 最佳答案 你可以只用一个计数器轻松做到这一点,只是这次你要比较的值的索引:publicstaticintfind

java - 如何深拷贝二叉树?

我想使用我自己的Node类在Java中实现树结构。但是我很困惑如何做一个深拷贝来复制一棵树。我的Node类应该是这样的:publicclassNode{privateStringvalue;privateNodeleftChild;privateNoderightChild;....我是递归新手,有什么代码可以学习吗?谢谢! 最佳答案 尝试classNode{privateStringvalue;privateNodeleft;privateNoderight;publicNode(Stringvalue,Nodeleft,Node