函数调用时不保留递归函数调用值

时间:2013-10-28 09:11:53

标签: php recursion return

如果我们使用递归函数调用如何为变量分配内存。在代码下面运行它的echo 2作为结果。任何人都可以指导我为什么$ a的值不参与任何这个循环迭代。 如果我设置

$a= recursionfunction($a); 

在函数中,它将正常工作。

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

    }
   return $a;

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

1 个答案:

答案 0 :(得分:1)

假设您的意思是recursionfunction( 1 )而不是abc( 1 ),那么您的功能中缺少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;

可以在此问题中找到更多详细信息:Are PHP Variables passed by value or by reference?

可能你再次想要添加一个额外的return语句来实际使用递归的值:

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