无法找出递归函数的总和

时间:2013-12-20 19:16:20

标签: php recursion sum

我正在尝试创建一个递归函数,该函数按顺序显示n个从最大到2的数字。

如果n=5它应显示10 8 6 4 2,然后显示这些数字的总和。 我在for循环中使用了这个$s=$s+$inc,它可以工作。

为什么这不适用于递归数字?

<?php
$inc = 2;
recv(5);

function recv($v)
{
    global $inc;
    if ($v >= 1) {
        echo $inc * $v . " ";
        $v--;
        $s = $s + $inc * $v;
        recv($v);
    }
}

echo 'The sum is $s';
?>

输出是:

  

10 8 6 4 2总和为$s

3 个答案:

答案 0 :(得分:3)

问题是$s是一个局部变量,因此每次调用recv()时,它都会读取(并写入)它的不同副本。类似地,当你最终回应它时,它正在读取另一个恰好具有相同名称的变量。

您需要做的是从recv()函数返回到目前为止的总和,并在您继续时添加它们。这样的事情会更好:

function recv($v)
{
    global $inc;
    if ($v <= 1) return $inc; // <-- terminal condition
    return ($inc * $v) + recv($v - 1); // <-- recursion
}

$s = recv(5);
echo "The sum is $s";

答案 1 :(得分:-1)

尝试echo 'The sum is '. $s;

请参阅:String Operators

答案 2 :(得分:-1)

首先,您应该使用更高的“”字符串文字到varible parsingstring operators。 第二,您尝试回显变量$s,它对于函数recv()是本地的。所以,你应该让它全局化(并且不会忘记初始化)。