> 백엔드 개발 > PHP 튜토리얼 > php的函数表达式能递归嘛?

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

WBOY
풀어 주다: 2016-06-06 20:50:03
원래의
951명이 탐색했습니다.

有一个函数表达式

<code>$make = function($std){};
</code>
로그인 후 복사
로그인 후 복사

如何实现递归?

<code>$make = function($std){ $make($std);  };
</code>
로그인 후 복사
로그인 후 복사

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

<code>$make = function($std, $make){ $make($std);  };
$make($std, $make);
</code>
로그인 후 복사
로그인 후 복사

回复内容:

有一个函数表达式

<code>$make = function($std){};
</code>
로그인 후 복사
로그인 후 복사

如何实现递归?

<code>$make = function($std){ $make($std);  };
</code>
로그인 후 복사
로그인 후 복사

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

<code>$make = function($std, $make){ $make($std);  };
$make($std, $make);
</code>
로그인 후 복사
로그인 후 복사

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

print $f(10);
</code>
로그인 후 복사

我想楼主要的一定是这种东西。注意,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>
로그인 후 복사

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿