0

如果我们使用递归函数调用如何为变量分配内存。在代码下面运行时,它的 echo 2 作为结果。谁能指导我为什么 $a 的值不接受任何循环迭代。如果我设置

$a= recursionfunction($a); 

在函数中,它可以正常工作。

function recursionfunction($a)
{
    if($a<10)
    {
        $a=$a+1;
        recursionfunction($a);

    }
   return $a;

}
$result = recursionfunction(1);
echo $result
4

1 回答 1

1

假设您的意思是recursionfunction( 1 )而不是,则您的函数abc( 1 )中缺少 a :return

function recursionfunction($a)
{
    if($a<10)
    {
        $a=$a+1;
        return recursionfunction($a);
// missing -^
    }else{
        return $a;
    }

}
$result = recursionfunction(1);
echo $result

编辑

在您进行(大量)编辑之后,整个情况就不同了。让我们逐行浏览函数,看看会发生什么:

// at the start $a == 1, as you pass the parameter that way.

// $a<10, so we take this if block
    if($a<10)
    {
        $a=$a+1;
// $a now holds the value 2

// call the recursion, but do not use the return value
// as here copy by value is used, nothing inside the recursion will affect
// anything in this function iteration
        recursionfunction($a);
    }

// $a is still equal to 2, so we return that
   return $a;

可以在这个问题中找到更多详细信息:PHP 变量是按值传递还是按引用传递?

可能您又想添加一条附加return语句,以实际使用递归的值:

function recursionfunction($a)
{
    if($a<10)
    {
        $a=$a+1;
        return recursionfunction($a);
// add ---^
    }
   return $a;
}
于 2013-10-28T09:16:08.147 回答