background image

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));

实验结果: