草庐IT

递归图

全部标签

swift - Swift 中递归枚举的奇怪行为(Beta 7)

enumTree{caseLeaf(String)caseNode(Tree)}//compilernothappy!!enumTree{caseLeaf(String)caseNode([Tree])}//compilerishappyin(arguably)amorecomplexrecursivescenario?Swift编译器如何适用于第二种(更复杂的)场景而不是第一种? 最佳答案 值得注意的是Swift2beta2和进一步具有用于递归枚举的indirect关键字-这意味着enumTree{caseLeaf(T)indir

java - 递归与 For 循环 - 阶乘,Java

这两种获取阶乘的方法(循环与递归)哪种更有效/更快?如果可以改进,如何改进?语言:Javaprivatestaticlongfactrecur(intn){if(n==0){return1;}else{returnn*factrecur(n-1);}}privatestaticlongfactloop(inta){longtotal=1;for(intb=a;b>=1;b--){total*=b;}returntotal;} 最佳答案 for循环会更有效率,因为没有方法调用的开销。(作为一般规则,循环几乎总是比递归更有效)为了解释为

java.lang.StackOverflowError 由于递归

我的问题是,当我使用递归时,我通常会得到一个java.lang.StackOverflowError。我的问题是-为什么递归比循环更容易导致堆栈溢出,是否有使用递归避免堆栈溢出的好方法?这是尝试解决problem107,它在他们的示例中运行良好,但由于自身问题耗尽了堆栈空间。//-1161221-1-1-116-1-11720-1-112-1-128-131-1211728-1181923-120-118-1-111-1-13119-1-127-1-1-1231127-1publicclasstries{publicstaticintn=7,min=Integer.MAX_VALUE;

java - 为什么递归 MergeSort 比迭代 MergeSort 更快?

我刚刚实现了这两种算法,当我绘制结果时我很惊讶!递归实现显然比迭代实现更快。之后,我将插入排序与两者相结合,结果是一样的。在讲座中,我们经常看到递归比阶乘计算中的迭代慢,但在这里似乎并非如此。我很确定我的代码是正确的。这种行为的解释是什么?它看起来像java(10)在递归模式下自动实现多线程,因为当我显示小动画时,插入排序与合并操作并行工作。如果这些代码还不足以理解这里是我的github:Github编辑重新加载正如评论中所说,我应该比较相似的东西,所以现在合并方法在迭代和递归中是相同的。privatevoidmerge(ArrayToSortarray,T[]sub_array,in

java - 由于 Java 9 HashMap.computeIfAbsent() 在尝试内存递归函数结果时抛出 ConcurrentModificationException

今天我从一些JS类(class)中学习了什么是内存,并尝试用Java实现它。我有一个简单的递归函数来评估第n个斐波那契数:longfib(longn){if(n然后我决定使用HashMap来缓存递归方法的结果:privatestaticFunctionmemoize(Functionfn){finalMapcache=newHashMap();returnin->{if(cache.get(in)!=null){returncache.get(in);}else{Oresult=fn.apply(in);cache.put(in,result);returnresult;}};}这如我

java - 使用 Jackson 和 Mockito 序列化对象时的无限递归

我在使用MockMvc、Mockito和Jackson测试SpringController时遇到了这个问题,所以我创建了一个简单的类来测试Jackson的行为方式。我正在使用jackson-databind:2.3.1和mockito-core:1.9.5。给定这个类:importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.ObjectMapper;importjava.io.Serializable;importstaticorg.mockito.Moc

java - 随机递归方法中 Math.Random 中的 StackOverflowError

这是我程序的上下文。一个函数有50%的机会什么都不做,50%的机会调用它自己两次。程序完成的概率是多少?这段代码是我写的,显然效果很好。答案可能不是每个人都清楚的是这个程序有100%的机会完成。但是当我运行这个程序时,在Math.Random()中出现了StackOverflowError(多么方便;))。有人可以指出它是从哪里来的,并告诉我我的代码是否有误吗?staticintbestDepth=0;staticintnumberOfPrograms=0;@TestpublicvoidtestProba(){for(inti=0;ibestDepth){bestDepth=depth

java - 在 Java 8 中递归展平嵌套映射的值

给定一个Map,其中的值为String或另一个Map,如何使用Java8将映射扁平化为单个值列表?例子:Map-"key1"->"value1"-"key2"->"value2"-"key3"->Map-"key3.1"->"value3.1"-"key3.2"->"value3.2"-"key3.3"->Map-"key3.3.1"->"value3.3.1"-"key3.3.2"->"value3.3.2"对于上面的例子,我想要下面的列表:value1value2value3.1value3.2value3.3.1value3.3.2我知道可以这样做:publicstaticvoi

java - 这里的递归是如何工作的?

代码1:publicstaticintfibonacci(intn){if(n==0||n==1){return1;}else{returnfibonacci(n-1)+fibonacci(n-2);}}如果您还没有解释完它是什么,您如何使用fibonacci?我已经能够理解在其他情况下使用递归,例如:代码2:classtwo{publicstaticvoidtwo(intn){if(n>0){System.out.println(n);two(n-1);}else{return;}}publicstaticvoidmain(String[]arg){two(12);}}不过,在代码2

java - 谐波序列递归

我真的掌握了递归的诀窍(或者我认为如此),但这个问题让我很困惑。我试图返回1+1/2+1/3+...+1/n,但无论我尝试什么,该方法都返回1.0。我一辈子都弄不明白哪里出了问题。publicstaticdoubleharmonic(intn){if(n==1){return1;}else{return(1/n)+(1/harmonic(n-1));}} 最佳答案 你想使用浮点除法:publicstaticdoubleharmonic(intn){if(n==1.0){return1.0;}else{return(1.0/n)+(1