搜索

首页  >  问答  >  正文

php的函数表达式能递归嘛?

有一个函数表达式

$make = function($std){};

如何实现递归?

$make = function($std){ $make($std);  };

排除这样的写法,不太优雅

$make = function($std, $make){ $make($std);  };
$make($std, $make);
PHP中文网PHP中文网2816 天前428

全部回复(3)我来回复

  • 阿神

    阿神2017-04-10 14:29:48

    $f = function($x) use(&$f){
        if($x==0 || $x==1)
            return 1;
        return $f($x-1) + $f($x-2);
    };
    
    print $f(10);
    

    我想楼主要的一定是这种东西。注意,use(&$f)这里必须用引用,否则会出错。

    use可以在定义匿名函数时,把外部的变量捕捉(值复制)到匿名函数内部。
    在这个例子中,在未完成赋值时,$f可以认为还不存在,这时捕捉的话,所捕捉的是一个未定义的变量。 所以我们要捕捉一个引用,这样在$f赋值完成后,匿名函数内部的$f也就指向匿名函数自身了。
    (这话太绕了...)

    回复
    0
  • 阿神

    阿神2017-04-10 14:29:48

    <?php
    function make($std)
    {
            if ($std < 0)
                    return -1;
    
            if(($std == 0) || ($std == 1))
                    return $std;
    
            return make($std - 1) + make($std - 2);
    }
    
    for ($i = 1; $i < 20; ++$i){
            echo make($i);
            echo " ";
    }
    ?>
    

    这个斐波那契的递归计算给你做个参考哈。

    回复
    0
  • PHPz

    PHPz2017-04-10 14:29:48

    php递归函数例子

    回复
    0
  • 取消回复