这是显示尾递归的好例子吗?

public printName(){
    System.out.println("Smith");
    printName();
}

我无意在现实生活中这样做,但我以此为例进行考试。这是正确的吗?

最佳答案

不,有两个原因:

  • tail递归仅在编译器支持时才有价值(尾调用优化)。在Java中,它仍以StackOverflowError
  • 结尾
  • 最好显示一些停止条件。您的代码等效于永远循环运行。

  • 考虑一下Scala中几乎相同的代码,唯一的区别是Scala编译器将执行尾部调用优化,并且循环永远运行:
    def printName() {
      println("Smith");
      printName()
    }
    

    07-24 09:23