运行我的“骑士之旅”时的StackOverflowError(否则它已经完成了)

时间:2011-03-05 01:19:41

标签: java recursion backtracking stack-overflow

我正在尝试制作一个程序,通过棋盘的所有正方形(大小并不重要,但现在它是6x6)与骑士,称为“骑士之旅”check it out on wiki。 / p>

巡回赛应该被关闭,这意味着最后一个参观过的广场上的骑士可以“攻击”他开始的广场。该代码适用于某些正方形,例如,main中的输入'traverse(1,1,1)'生成输出,不仅显示他正在遍历而且回溯并返回到成功遍历目标。但是,如果我输入'traverse(1,0,0)',我会得到 StackOverflowError 。 由于它有时成功,回溯和遍历,我知道代码有效,我只是不知道如何摆脱错误。我假设我打的电话太多了,但是我不知道如何解决这个问题,有很多方格可以参观:) 编辑了代码,主要是因为老师可以找到我作弊的说法。

1 个答案:

答案 0 :(得分:4)

您正在尝试使用递归来解决指数复杂性问题。这不会在非常小的投入之外发挥作用。堆栈大小的增长速度比问题的大小快。吹掉堆栈不会占用很大的问题。

你不会让StackOverflowErrors消失。您需要重新考虑您的算法是基于循环而不是基于递归。