我正在尝试创建一个递归函数,该函数按顺序显示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
答案 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 parsing或string operators。
第二,您尝试回显变量$s
,它对于函数recv()
是本地的。所以,你应该让它全局化(并且不会忘记初始化)。