【发布时间】:2011-03-17 09:29:14
【问题描述】:
查看这个 Scala 代码:
def rec(n: Int) {
if (n > 1) {
val d = n / 2
rec(d)
// if (d > 1) // abort loop
rec(n/d)
}
}
此代码将导致无限循环。由于尾递归优化,我没有收到 StackOverflowError。
用 jad 反编译我得到了这个 Java 代码:
public void rec(int n)
{
int d;
for(; n > 1; n /= d)
{
int i = n;
d = i / 2;
rec(d);
}
}
在循环的最后一行,该方法调用自身,因此我不了解尾调用位置。谁能解释一下?
【问题讨论】:
标签: scala tail-recursion