Erlang中的Tail Recursion vs Forward递归

Sta*_*tan 5 erlang recursion tail-recursion

对于erlang中的性能,尾递归是否比向前递归更好?
或者erlang编译器也优化了前向递归?
我的意思是,有没有理由使用尾递归而不是前向递归?
在我看来,前向递归看起来更漂亮.

ton*_*nio 10

尾递归和前向递归是完全不同的概念.见这个讨论.

可以编写尾递归的前向递归,从而进行优化.也可以编写一个非尾递归的正向递归:在这种情况下,它不会被优化,即它会占用堆栈空间.


Ada*_*erg 4

尾递归通常更好,因为它使用更少的内存。您只需将需要的内容带入下一次调用,从而最大限度地减少堆栈上的内存利用率。此外,当优化尾递归代码时,不需要的函数返回将被丢弃,这将使其在某些情况下稍微快一些。

例如,如果一个函数的返回值是对另一个函数的调用,则无需将中间函数保留在堆栈上。所以代码从内部函数直接跳回调用者。

在某些情况下,Erlang 编译器将非尾递归优化为尾递归,但不要指望它。尽可能养成编写尾递归函数的好习惯。