Heim > Backend-Entwicklung > PHP-Tutorial > php的函数表达式能递归嘛?

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

WBOY
Freigeben: 2016-06-06 20:50:03
Original
955 Leute haben es durchsucht

有一个函数表达式

<code>$make = function($std){};
</code>
Nach dem Login kopieren
Nach dem Login kopieren

如何实现递归?

<code>$make = function($std){ $make($std);  };
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>$make = function($std, $make){ $make($std);  };
$make($std, $make);
</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

有一个函数表达式

<code>$make = function($std){};
</code>
Nach dem Login kopieren
Nach dem Login kopieren

如何实现递归?

<code>$make = function($std){ $make($std);  };
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>$make = function($std, $make){ $make($std);  };
$make($std, $make);
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

print $f(10);
</code>
Nach dem Login kopieren

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

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

<code><?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 " ";
}
?>
</code>
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage