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

微信小程序推送服务通知需要收集足够的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();

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 不支持上传文件,所以就复制过来了。作者信息什么的都没删。对前端基本属于一窍不通,所以没有任何修改,反正用着没问题就...
    全栈在路上阅读 6,014评论 0 2
  • <?php /** * 常用函数库 * */ class Core_Fun { /** * 对变量进行反...
    寻梦xunm阅读 3,459评论 0 0
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,593评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,384评论 19 139
  • 磨砺之后,才能更淡然,心态才能更平和,才能更接近大主宰。 控制自己,掌控敌人。 既然要考研,就拿出点考研的样子来。
    体育选课阅读 2,958评论 0 0