Scala 中的递归不会停止
Recursion in scala wont stop
我有一个方法可以帮助我解决骑士之旅。我希望我的递归在找到解决方案后立即停止,但它一直在继续。
最后 returns 将近 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
}
}
}
movesAvailable.foreach{ x =>
if(myRecursion(dimension, x:: solution).isDefined){
x::solution;
}
}
None
这可能是你的问题。你在一个循环中递归地调用你的函数,但如果它成功,你实际上并没有退出循环。您可以将其切换为 takeWhile,它在 myRecursions returns None.
时继续运行
另外,那段代码现在没有做任何事情 - 你有一个 if 语句计算出一些东西,但是你 return None 无论如何。
我有一个方法可以帮助我解决骑士之旅。我希望我的递归在找到解决方案后立即停止,但它一直在继续。
最后 returns 将近 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
}
}
}
movesAvailable.foreach{ x =>
if(myRecursion(dimension, x:: solution).isDefined){
x::solution;
}
}
None
这可能是你的问题。你在一个循环中递归地调用你的函数,但如果它成功,你实际上并没有退出循环。您可以将其切换为 takeWhile,它在 myRecursions returns None.
时继续运行另外,那段代码现在没有做任何事情 - 你有一个 if 语句计算出一些东西,但是你 return None 无论如何。