【问题标题】:php recursiv function "return" not work?php递归函数“返回”不起作用?
【发布时间】:2014-05-20 21:01:59
【问题描述】:

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

<?php

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

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

?>

【问题讨论】:

    标签: php recursion return


    【解决方案1】:

    如果foo 中的i 为10,则将值10 返回给foo 的调用实例(其中i 为9),然后函数在没有返回语句的情况下结束。

    你可能想要

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

    【讨论】:

      【解决方案2】:

      你的代码是这样工作的:

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

      因为$i if 之外有一个不返回值的隐式返回。

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

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

      【讨论】:

        【解决方案3】:

        试试

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

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

        【讨论】:

          【解决方案4】:

          你应该返回值:

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

          【讨论】:

            【解决方案5】:

            尝试:

            函数 foo($i) {

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

            }

            【讨论】:

              【解决方案6】:

              为了您的理解,回显$i,然后在最后一个函数进行测试,从不调用else语句尝试不使用else语句。

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

              【讨论】:

              • 它将在第 10 次递归中,或者如果您使用 10 调用它。$i=0 仅将 0 设为默认值,并且每次递归都提供一个参数。
              猜你喜欢
              • 1970-01-01
              • 2021-03-02
              • 2012-12-04
              • 2013-09-21
              • 2012-03-11
              • 2019-03-04
              • 2015-04-27
              • 2012-11-27
              • 2011-04-20
              相关资源
              最近更新 更多