【发布时间】:2012-03-15 19:19:16
【问题描述】:
我使用分层数据结构做一些事情,并且我设计了一组方法来使用间接递归对其进行遍历/分析,如下所述。
有a、b、c 和d 方法,它们都具有Unit 返回类型。首先调用方法a。根据数据,它会做一些事情,然后停止或调用b/c/d 之一。 b、c 和 d 中的每一个都是一样的——每个方法都可以停止或调用其他 3 个方法中的任何一个。所以调用了哪些方法,它们的执行顺序直到运行时才知道,并且递归并不直接明显,因为没有方法直接调用自己(不用担心,每个方法都会被注释以描述循环/递归的性质电话)。
对a、b、c 或d 的每次额外调用是每个方法中执行的最后一件事,但它并不是每个方法的最后一个语句;将有一个 if 或 case 语句来控制将调用哪个语句。
在没有方法直接调用自身的情况下,Scala 编译器是否能够分析这个多层调用链并为其实现尾递归?
【问题讨论】:
标签: scala recursion tail-recursion tail-call-optimization