如果我们使用递归函数调用如何为变量分配内存。在代码下面运行它的echo 2作为结果。任何人都可以指导我为什么$ a的值不参与任何这个循环迭代。 如果我设置
$a= recursionfunction($a);
在函数中,它将正常工作。
function recursionfunction($a)
{
if($a<10)
{
$a=$a+1;
recursionfunction($a);
}
return $a;
}
$result = recursionfunction(1);
echo $result
答案 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;
}