fibonacci2 就是一个尾递归,它增加两个累加器 acc1 和 acc2,并给出初始的值。记住:递
归转化为尾递归的思想一定是增加累加器,减少递归外操作。
尾递归在不同语言上的应用也是不同的。最常使用的就是函数式编程 Erlang,几乎是所有
出现递归的函数全部都修改成为尾递归。下面说一下尾递归在几个不同的语言上的表现和
应用。
php 中的尾递归
我们做个实验
普通递归:
代码如下:
<?php
function factorial($n)
{
if($n == 0) {
return 1;
}
return factorial($n-1) * $n;
}
var_dump(factorial(100000000));
尾递归:
代码如下:
<?php
function factorial($n, $acc)
{
if($n == 0) {
return $acc;
}
return factorial($n-1, $acc * $n);
}
var_dump(factorial(100000000, 1));
实验结果: