Tag: 递归

如何从数组中删除最后一个元素?

现在我正在使用递归回溯,我的任务是找到迷宫中最长的路径,质量表示为用坐标覆盖的字段,并且墙壁的坐标在文件中是酸痛的。 我已经创建了一个解析器来解析输入文件并构建墙,但我还将这个坐标存储在一个对象类型Coordinate的数组中,以检查是否有可能在下一个“蛇”上移动下一个“蛇”字段,然后我创建了这个方法,现在我已经明白我需要一个方法来从数组中删除最后一个坐标,当我使用回溯时,我该怎么办?目标不是使用数组列表或链表只有arrays! 谢谢! public class Coordinate { int xCoord; int yCoord; Coordinate(int x,int y) { this.xCoord=x; this.yCoord=y; } public int getX() { return this.xCoord; } public int getY() { return this.yCoord; } public String toString() { return this.xCoord + “,” + this.yCoord; } } 和 public class Row { static final int MAX_NUMBER_OF_COORD=1000; Coordinate[] coordArray; […]

以递归方式查找字符串中最长的单词

如何递归地找到字符串中最长的单词? 编辑 完了,谢谢大家。 这是修改后的代码。 public static String longestWord(String sentence) { String longest; int i = sentence.indexOf(‘ ‘); if (i == -1) { return sentence; } String first = sentence.substring(0,i); first = first.trim(); String rest = sentence.substring(i); rest = rest.trim(); longest = stringcompare(first,longestWord(rest)); return longest; }

Java是否支持尾递归?

可能重复: 为什么JVM仍然不支持尾调用优化? 我在网上看到了很多不同的答案,所以我想我会问专家。

Java递归电话号码信件

如何使用递归方法编写java程序,该方法接受类似“234”的int并将其转换为电话簿上的相应字母(2 = ABC,3 = DEF等),并打印出这个的排列? 例如: 输入= 234 输出= ADG ADH ADI AEG AEH AEI AFG AFH AFI BDG BDH BDI BEG BEH BEI BFG BFH BFI CDG CDH CDI CEG CEH CEI CFG CFH CFI 输入= 89 输出= TW TX TY TZ UW UX UY UZ VW VX VY VZ

理解双递归

如果函数中只有一个递归调用,我就能轻松理解递归。 但是,当我在同一个函数中看到两个或多个递归调用时,我真的很困惑。 例: int MaximumElement(int array[], int index, int n) { int maxval1, maxval2; if ( n==1 ) return array[index]; maxval1 = MaximumElement(array, index, n/2); maxval2 = MaximumElement(array, index+(n/2), n-(n/2)); if (maxval1 > maxval2) return maxval1; else return maxval2; } 我理解在每次递归调用期间n减少一半的事情。 我只是不明白下一个递归调用是如何工作的。 它变得混乱和我的理解,直到那一点崩溃,我放弃了。 如果有人可以用一个简洁的例子手动说明这一点,我将非常感激。 我已经完成了编程,并打印了输出。 但是,我不明白这项工作背后的计算方式。 这是我的理解,直到一切都变得一无所获: int a [] = {1,2,10,15,16,4,8} 初始调用:MaximumElement(a,0,7) 该函数开始:第一次调用:MaximumElement(a,0,7 / […]

调试递归算法

我的问题是,是否有一些智能的方法来调试复杂的递归算法。 假设我们有一个复杂的(不是一个简单的情况,当递归计数器在每个’嵌套迭代’中减少’)。 我的意思是在循环可能时递归遍历图形。 我需要检查一下我是否没有得到无限循环。 只使用调试器来做这件事并没有给出确定的答案(因为我不确定算法是在无限循环中还是只是处理它)。 没有具体的例子,很难解释它。 但我需要的是…… ‘检查无限循环是否发生在让我们说复杂的递归算法’。

如何通过此回溯找到第一个解决方案

我正在尝试编写一个只返回第一个可能解决方案的数独求解器。 我设法用void方法打印所有可能的解决方案,但我不能停止第一次找到。 我知道首选方法是切换到布尔方法并在树中返回true – 但我找不到正确的方法来编写它。 我试过的任何方式总是给出编译错误( method must return boolean )。 public boolean recursiveSolve(int line, int column) { if(line == N) // N is the board size (9) return true; // if Cell is not empty – continue if(board1.getCell(line, column) != 0) { return nextCell(line, column); } // if Cell empty – solve else { […]

同步方法以递归方式调用自身。 这打破了吗?

这个问题的关键是要说明Java没有像我预期的那样工作。 您希望以下代码如何表现? public class SynchTester { private static SynchTester synchTester; public synchronized static SynchTester getSynchTester(){ if(synchTester==null){ synchTester = new SynchTester(); } return synchTester; } private SynchTester() { SynchTester myTester = getSynchTester(); } public static void main(String[] args) { SynchTester tester = SynchTester.getSynchTester(); } } 我希望它挂起一个死锁等待递归完成,但它会抛出StackOverflow。 显然,synchronized不会阻止访问同一个线程。 这是一个错误吗?

Horner的小数部分递归算法 – Java

我正在尝试创建一个递归方法,使用Horner的算法将基数n中的小数转换为基数10.我在这里搜索过,但是找不到任何处理小数部分的细节。 作为一个抬头,我在递归时非常弱,因为我还没有在我的编程课程中正式学习它,但是已经被另一个类分配了它。 我能够创建一个方法来处理数字的整数部分,而不是小数部分。 我觉得我写的方法非常接近,因为它让我的测试数字的答案加倍(可能是因为我测试的是基数2)。 传递的第一个参数是一个填充系数的int数组。 我并不太关心系数的顺序,因为我正在使所有系数相同以测试它。 第二个参数是基础。 第三个参数初始化为系数减1,我也用于整数部分方法。 我尝试使用系数的数量,但这是从数组中走出来的。 我尝试将基数再划分一次,因为这会给我正确的答案,但如果我在基本案例返回语句或最终返回语句的末尾这样做,它就不起作用。 因此,当我尝试将0.1111 base 2转换为base 10时,我的方法返回1.875 (正确答案为0.9375的两倍)。 任何提示将不胜感激! //TL;DR coef[0] = 1; coef[1] = 1; coef[2] = 1; coef[3] = 1; base = 2; it = 3; //results in 1.875 instead of the correct 0.9375 public static double fracHorner(int[] coef, int base, int it) { if (it […]

递归创建目录

有没有人知道如何使用Java创建基于n级深度字母表(az)的子目录? /a /a /a /b /c .. /b /a /b .. .. /a /b /c .. /b /a /a /b .. /b /a /b .. .. /a /b .. .. /a /a /b .. /b /a /b .. .. /a /b ..