【发布时间】:2011-02-14 02:57:55
【问题描述】:
如何打破循环?
var largest=0
for(i<-999 to 1 by -1) {
for (j<-i to 1 by -1) {
val product=i*j
if (largest>product)
// I want to break out here
else
if(product.toString.equals(product.toString.reverse))
largest=largest max product
}
}
如何将嵌套的 for 循环变成尾递归?
来自 2009 年 FOSDEM 的 Scala Talk http://www.slideshare.net/Odersky/fosdem-2009-1013261 第22页:
中断并继续 Scala 没有它们。为什么? 它们有点势在必行。更好地使用许多较小的功能 问题如何与闭包交互。 不需要它们!
解释是什么?
【问题讨论】:
-
您的比较需要第二个等号:if(product.toString == product.toString.reverse) 或者可能是等号方法调用。
-
是的,我在输入时错过了那个
-
我知道我正在复活一个老问题,但我很想知道这段代码的目的是什么?我首先认为您试图通过
i和j的给定组合找到最大的“回文”产品。如果此代码在没有跳出循环的情况下运行完成,则结果为906609,但通过提前跳出循环,结果为90909,因此跳出循环不会使代码“更高效”为它正在改变结果。
标签: scala for-loop break tail-recursion