0

我有一种方法可以帮助我解决骑士之旅。我希望在找到解决方案后立即停止递归,但是它会继续进行。

最后,它返回近 20 种不同的解决方案。我在下面添加了我的代码,有人可以指出这里有什么问题吗?

def myRecursion(dimension: Int, solution: Solution) : Option[Solution] = {

    if ( dimension * dimension == solution.size) {
        println("Stop it now")
        Some(solution)
    } else {
        val movesAvailable = possibleMoves(dimension, solution, solution.head) 
        val bestm = bestMoves(movesAvailable)

        if ( bestm.isDefined ) {
            myRecursion(dimension, bestm.get ::: solution)
        } else {
            movesAvailable.foreach{ x => 
                if(myRecursion(dimension, x:: solution).isDefined){
                    x::solution;
                } 
            }
            None

        }
    }
}
4

1 回答 1

1
movesAvailable.foreach{ x => 
                if(myRecursion(dimension, x:: solution).isDefined){
                    x::solution;
                } 
            }
None

那可能是你的问题。您在循环中递归地调用您的函数,但如果它成功,您实际上并没有退出循环。您可能可以将其切换为在 myRecursions 返回 None 时继续运行的 takeWhile。

此外,那段代码现在没有做任何事情 - 你有一个 if 语句可以评估某些东西,但是无论如何你都会返回 None 。

于 2017-11-20T04:46:25.760 回答