if-else without else会导致递归函数重复

时间:2017-03-31 12:15:29

标签: scala if-statement conditional

为什么以下产生输出" ayyayy"而不只是" ayy" (一次)?

def iftest(b: Boolean): Unit = {
  if(b) iftest(false)
  print("ayy")
}

我在REPL中以iftest(true)运行它,这会导致它在第一次通过时失败但在第二次通过时失败(因此只有一次" ayy")。那么为什么它既成功又成功呢?

是否存在某种递归"后退"在斯卡拉,我不知道?

1 个答案:

答案 0 :(得分:8)

  

scala中是否存在某种递归的“backfolding”,我没有   知道吗?

不,该方法按照您的定义运行。让我们分析一下:

  1. 您调用iftest(true)并调用该方法。
  2. if(b)true,因此您调用iftest(false)并开始新的堆栈框架。
  3. if(b)现在为false,因此我们不会再次递归调用该方法。
  4. 下一行代码为print("ayy"),因此将其打印出来并完成方法
  5. 我们回到一帧,我们现在调用了iftest(false),下一行代码是println("ayy"),所以再打印出来
  6. 方法完成。
  7. 也许你想要的是:

    def iftest(b: Boolean): Unit = {
      if (b) {
        iftest(false)
        print("ayy")
      }
    }