【发布时间】:2015-10-12 16:45:07
【问题描述】:
两个功能:
def eat(): Unit = sleep()
def sleep(): Unit = eat()
它们都是递归函数,因为它们在体内(间接地)调用了自己,对吧?
但它们是尾递归函数吗?
【问题讨论】:
标签: function scala recursion tail-recursion
两个功能:
def eat(): Unit = sleep()
def sleep(): Unit = eat()
它们都是递归函数,因为它们在体内(间接地)调用了自己,对吧?
但它们是尾递归函数吗?
【问题讨论】:
标签: function scala recursion tail-recursion
它们都是递归函数,因为它们在体内(间接地)调用了自己,对吧?
是的,这叫mutual recursion。
但它们是尾递归函数吗?
是的,它们是,因为调用是主体的返回值。然而,afaik Scala 编译器并没有将这些优化成while 循环,它只对自递归函数这样做。有关详细信息,请参阅 Does Scala support tail recursion optimization?,有关解决方法,请参阅 How to use TailCalls?。
【讨论】:
GOTO 只允许您跳转到同一方法内的目标。请注意,在面向对象的语言中,方法是否调用“自身”实际上并不是很明显,因为它可能会调用不同的重载或覆盖的版本。