如何在递归scala工作表(IntelliJ)中查看中间结果?

时间:2016-09-27 17:58:40

标签: scala debugging recursion intellij-idea

我试图明确了解当我从以下位置更改此代码行时会发生什么:

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

如何在不导致错误的情况下查看每个递归迭代的该语句的输出?

0 个答案:

没有答案