美文网首页程序猿的进阶屋PHP经验分享
php利用高阶函数消除递归,解决递归栈溢出问题

php利用高阶函数消除递归,解决递归栈溢出问题

作者: 星门小嗝嗝 | 来源:发表于2018-10-10 13:44 被阅读16次

    微信小程序推送服务通知需要收集足够的formid,使用过程中发现如果formid大量失效,在使用递归从redis从获取可用formid的时候会导致栈溢出问题,下面方法是使用php的高阶函数来消除递归,完美解决问题,记录之:

    <?php

    class A

    {

    public static function factorial($n, $accumulator = 1) {

    if ($n == 0) {

    return $accumulator;

    }

    return function() use($n, $accumulator) {

    return self::factorial($n - 1, $accumulator * $n);

    };

    }

    public static function trampoline($params) {

    $result = call_user_func_array('self::factorial', $params);

    while (is_callable($result)) {

    $result = $result();

    }

    return $result;

    }

    public static function run()

    {

    var_dump(self::trampoline(array(500)));

    }

    }

    A::run();

    相关文章

      网友评论

        本文标题:php利用高阶函数消除递归,解决递归栈溢出问题

        本文链接:https://www.haomeiwen.com/subject/zcupaftx.html