尾递归

来源:互联网 发布:劫持刘嘉玲的是谁知乎 编辑:程序博客网 时间:2024/04/29 16:10
普通的线性递归堆栈耗用大,比尾递归更加消耗资源,不过两者效率差不多。。。

举个栗子:递归求n的阶乘 1*2*...*n

// 普通线性递归function recursive($n) {    if ($n > 1)        return recursive($n-1) * $n;    else        return 1;}// 尾递归,s代表乘积function tailRecursive($n, $s = 1) {    if ($n > 1)        return tailRecursive($n-1, $s * $n);    else        return $s;}recursive(5); tailRecursive(5);// 递归过程--- 线性递归过程:recursive(5){5 * recursive(4)}{5 * {4 * recursive(3)}}{5 * {4 * {3 * recursive(2)}}}{5 * {4 * {3 * {2 * recursive(1)}}}}{5 * {4 * {3 * {2 * 1}}}}{5 * {4 * {3 * 2}}}{5 * {4 * 6}}{5 * 24}120---  尾递归过程:tailRecursive(5)tailRecursive(4, 5)tailRecursive(3, 20)tailRecursive(2, 60)tailRecursive(1, 120)120


0 0
原创粉丝点击