1

我正在尝试制作一个程序,它可以通过一个名为“Knight's Tour”的骑士(大小并不重要,但现在它是 6x6)的所有方格,请在 wiki 上查看

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

4

1 回答 1

4

您正在尝试使用递归解决指数复杂性问题。这在非常小的输入之外是行不通的。堆栈大小的增长速度比问题的大小要​​快得多。吹过堆栈不需要非常大的问题规模。

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

于 2011-03-05T01:45:40.740 回答