gpt4 book ai didi

java - 为什么我的递归不断抛出 StackOverflow 错误?

转载 作者:行者123 更新时间:2023-12-02 03:33:02 25 4
gpt4 key购买 nike

我正在尝试生成一棵树,其中包含 8-N problem 的所有可能状态。 ,没有重复项。我可以在纸上做到这一点,但在代码中却不能。

这是我的递归函数:

......
...
..
root = new TreeNode(startingState);
visitedStates.add(root.getData().getStateValues());

generateStateSpaceRecursive(root);
}

public void generateStateSpaceRecursive(TreeNode node){

List<TreeNode> nextStatesNodes = getNextStates(node);

for (TreeNode childNode : nextStatesNodes){
if(!stateVisited(childNode.getData().getStateValues())) {
visitedStates.add(childNode.getData().getStateValues());
node.addChild(childNode);
generateStateSpaceRecursive(childNode);
}
}
}

为什么不停止?

此外,如果我正确理解了问题,它会说,

Implement the following types of search to (try to) solve this problem: depth first, breadth first, iterative deepening, some form of heuristic search.

但我首先需要状态空间,对吗?或者我可以应用算法并动态生成状态?

编辑:

private List<TreeNode> getNextStates(TreeNode node) {

List<TreeNode> nextStates = new ArrayList<>();

if(agent.canMoveLeft(node)){
nextStates.add(agent.moveLeft(node));
}
if(agent.canMoveRight(node)){
nextStates.add(agent.moveRight(node));
}
if(agent.canMoveUp(node)){
nextStates.add(agent.moveUp(node));
}
if(agent.canMoveDown(node)){
nextStates.add(agent.moveDown(node));
}

return nextStates;
}

最佳答案

您的状态太大,无法容纳堆栈。测试你的算法:

  • 样本较小。
  • 或增加堆栈大小(例如 java -Xss4m)

关于java - 为什么我的递归不断抛出 StackOverflow 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37810488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com