我试图明确了解当我从以下位置更改此代码行时会发生什么:
else f(a) * product(f)(a + 1, b)
为:
else f(a) * product(x => x)(a + 1, b)
或:
else f(a) * product(x => x * x)(a + 1, b)
这是完整的代码块:
object exercise {
class Prod (){
var acc: Int = 0
def product(f: Int => Int)(a: Int, b: Int): Int = {
acc = {
if (a > b) 1
else f(a) * product(f)(a + 1, b)
}
println(s"a: $a; b: $b; acc: $acc")
acc
}
}
val x = new Prod()
x.product(x => x * x)(1, 5);
}
我在IntelliJ社区版2016.2.4中使用scala工作表,如果这很重要的话。每次更改product(???)(a + 1, b)
时,我都会得到不同的结果。当我尝试仅查看递归函数调用的输出时,我得到java.lang.StackOverflowError
。编写代码时,我看到:
a: 5; b: 4; acc: 1
a: 4; b: 4; acc: 16
a: 3; b: 4; acc: 144
a: 2; b: 4; acc: 576
res2: Int = 576
如何在不导致错误的情况下查看每个递归迭代的该语句的输出?