草庐IT

RECURSION

全部标签

java - 与另一个几乎相同的函数相比,是什么导致这个递归函数崩溃?

这个问题在这里已经有了答案:Howdothepostincrement(i++)andpreincrement(++i)operatorsworkinJava?(14个回答)关闭7年前。这会导致堆栈溢出错误。我只需要帮助解释为什么这个崩溃与正确的类似的相比。我已经使用了调试器,但我仍然不清楚。publicstaticvoidmain(String[]args){countForwards(5);}publicstaticvoidcountForwards(intnum){if(num>=0){countForwards(num--);}System.out.print(num+"");

java - 在 Java 8 中实现无堆栈递归

如何在Java中实现无堆栈递归?似乎出现最多的词是“蹦床”,我不知道那是什么意思。有人可以详细说明解释如何在Java中实现无堆栈递归吗?另外,什么是“蹦床”?如果您不能提供其中任何一个,请您指出正确的方向(即,一本可以阅读的书或一些教授所有这些概念的教程)? 最佳答案 蹦床是一种将基于堆栈的递归转换为等效循环的模式。由于循环不添加堆栈帧,因此可以将其视为一种无堆栈递归。这是一个我觉得很有帮助的图表:来自bartdesmet.net你可以把蹦床想象成一个接受起始值的过程;迭代该值;然后以最终值退出。考虑这个基于堆栈的递归:public

java - 在 Java 8 中实现无堆栈递归

如何在Java中实现无堆栈递归?似乎出现最多的词是“蹦床”,我不知道那是什么意思。有人可以详细说明解释如何在Java中实现无堆栈递归吗?另外,什么是“蹦床”?如果您不能提供其中任何一个,请您指出正确的方向(即,一本可以阅读的书或一些教授所有这些概念的教程)? 最佳答案 蹦床是一种将基于堆栈的递归转换为等效循环的模式。由于循环不添加堆栈帧,因此可以将其视为一种无堆栈递归。这是一个我觉得很有帮助的图表:来自bartdesmet.net你可以把蹦床想象成一个接受起始值的过程;迭代该值;然后以最终值退出。考虑这个基于堆栈的递归:public

java - Java中的数独求解器,使用回溯和递归

我正在用Java为9x9网格编写数独求解器。我有以下方法:打印网格使用给定值初始化板测试冲突(如果相同的数字在同一行或3x3子网格中)一种逐一放置数字的方法,这需要最多的工作。在我详细介绍该方法之前,请记住,我必须使用递归来解决它,以及回溯(以此处的小程序为例http://www.heimetli.ch/ffh/simplifiedsudoku.html)另外,我正在通过垂直向下移动来解决这个数独问题,从左上角开始,通过第一列,然后通过第二列,等等。到目前为止,我有以下内容:publicbooleanplaceNumber(intcolumn){if(column==SUDOKU_SI

java - Java中的数独求解器,使用回溯和递归

我正在用Java为9x9网格编写数独求解器。我有以下方法:打印网格使用给定值初始化板测试冲突(如果相同的数字在同一行或3x3子网格中)一种逐一放置数字的方法,这需要最多的工作。在我详细介绍该方法之前,请记住,我必须使用递归来解决它,以及回溯(以此处的小程序为例http://www.heimetli.ch/ffh/simplifiedsudoku.html)另外,我正在通过垂直向下移动来解决这个数独问题,从左上角开始,通过第一列,然后通过第二列,等等。到目前为止,我有以下内容:publicbooleanplaceNumber(intcolumn){if(column==SUDOKU_SI

java - 有没有办法在 Java 中进行 n 级嵌套循环?

换句话说,我可以做类似的事情for(){for{for{}}}除了N次?换句话说,当调用创建循环的方法时,给它一些参数N,然后该方法会创建N个循环嵌套?当然,这个想法是应该有一种“简单”或“通常”的方式来做这件事。我已经有了一个非常复杂的想法。 最佳答案 jjnguy是对的;递归允许您动态创建可变深度嵌套。但是,如果不做更多工作,您将无法从外层访问数据。“内嵌”案例:for(inti=lo;i将变量i、j和k保留在最里面的主体使用范围内。这里有一个快速的技巧来做到这一点:publicclassNestedFor{publicstat

java - 有没有办法在 Java 中进行 n 级嵌套循环?

换句话说,我可以做类似的事情for(){for{for{}}}除了N次?换句话说,当调用创建循环的方法时,给它一些参数N,然后该方法会创建N个循环嵌套?当然,这个想法是应该有一种“简单”或“通常”的方式来做这件事。我已经有了一个非常复杂的想法。 最佳答案 jjnguy是对的;递归允许您动态创建可变深度嵌套。但是,如果不做更多工作,您将无法从外层访问数据。“内嵌”案例:for(inti=lo;i将变量i、j和k保留在最里面的主体使用范围内。这里有一个快速的技巧来做到这一点:publicclassNestedFor{publicstat

java - 在Java中递归反转字符串的最佳方法是什么?

我今天一直在搞递归。通常是一种未被充分使用的编程技术。我开始递归地反转一个字符串。这是我想出的://AmethodtoreverseastringusingrecursionpublicStringreverseString(Strings){charc=s.charAt(s.length()-1);if(s.length()==1)returnCharacter.toString(c);returnc+reverseString(s.substring(0,s.length()-1));}我的问题:Java中有没有更好的方法? 最佳答案

java - 在Java中递归反转字符串的最佳方法是什么?

我今天一直在搞递归。通常是一种未被充分使用的编程技术。我开始递归地反转一个字符串。这是我想出的://AmethodtoreverseastringusingrecursionpublicStringreverseString(Strings){charc=s.charAt(s.length()-1);if(s.length()==1)returnCharacter.toString(c);returnc+reverseString(s.substring(0,s.length()-1));}我的问题:Java中有没有更好的方法? 最佳答案

java - 在 Java 中使用递归的阶乘

我正在使用Java:TheCompleteReference一书学习Java。目前我正在研究递归主题。请注意:stackoverflow上有类似的问题。我搜索了他们,但我没有找到我的问题的解决方案。我对以下程序中的逻辑感到困惑。如果我运行下面的程序,它会产生正确的输出,但我不明白其中的逻辑。我没看懂下面这行的逻辑:result=fact(n-1)*n;据我所知,如果我们传递n=4的值,如下面的程序所示,然后,3*4存储在结果中,即12。再次调用fact(n-1)。然后n变为3。然后将2*3存储在结果中,替换之前的12。我想你明白我的困惑/困惑。谢谢。classCalculation{i