php递归函数“返回”不起作用?

时间:2014-04-08 09:05:52

标签: php recursion return

我尝试获取值10,但它来NULL。这里错了什么?在PHP 5.3上测试

<?php

function foo($i=0){
  if($i<10) foo($i+1);
  else return $i;
}

$value = foo();
var_dump($value);

?>

6 个答案:

答案 0 :(得分:4)

如果i中的foo为10,则值10将返回到foo的调用实例(其中i为9),然后函数结束时没有退货声明。

你可能想要

function foo($i=0) {
  if($i<10)
    return foo($i+1);
  return $i;
}

答案 1 :(得分:2)

你的代码是这样的:

function foo($i=0){
  if($i<10) 
    foo($i+1);
  else 
    return $i;
  return; // implicit return
}

$i&lt; 10你重复,直到它为0,但不返回或使用返回值。在if之外有一个隐式返回,它不返回任何值。

为了从递归中返回值,您需要一个return语句:

function foo($i=0){
  if($i<10) 
    return foo($i+1);
  else 
    return $i;
}

答案 2 :(得分:2)

if($i<10) 
  return foo($i+1);
else 
  return $i;

因为否则它永远不会返回。

答案 3 :(得分:1)

您应该返回值:

function foo($i=0){
  if($i<10) {
    return foo($i+1);
  } else {
    return $i;
  }
}

答案 4 :(得分:1)

尝试:

function foo($ i){

if ($i < 10) {
    echo "a",$i;
    $i=foo(($i + 1));
}

return $i;

}

答案 5 :(得分:0)

为了理解echo $i,然后在最后一个函数上测试,从不调用else语句,尝试不使用else语句。

function foo($i=0){
    if($i<10){
        foo($i+1);
        echo $i;
    }
    return $i;
    }

$value = foo();
var_dump($value);