美文网首页程序猿的进阶屋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利用高阶函数消除递归,解决递归栈溢出问题

    微信小程序推送服务通知需要收集足够的formid,使用过程中发现如果formid大量失效,在使用递归从redis从...

  • 9. 递归函数

    使用递归函数需要注意防止栈溢出解决递归调用栈溢出的方法是通过尾递归优化遗憾的是,大多数编程语言没有针对尾递归做优化...

  • 1

    #函数 ##递归函数容易,栈溢出,这个时候可以用*尾递归*优化,尾递归的意思就是说在递归函数末尾引用本函数的时候,...

  • 二叉树遍历(递归&非递归实现)

    递归实现: 非递归实现: 基于栈的递归消除: 递归(recursion)就是子程序(或函数)直接调用自己或通过一系...

  • Day30:理解递归的特例:尾递归

    使用递归会使代码变得非常简洁,但是递归利用不慎,很容易就会出现:stack overflow 栈溢出的问题,这是因...

  • 看完必会的正则表达式和递归

    1,递归 递归函数:一个函数在内部可以调用其本身 递归容易发生栈溢出错误(stack overflow),以上是一...

  • 排序——快排/归并(nlgn)

    快速排序一般是递归实现,但是递归有一个问题就是如果递归太深会导致栈溢出,而大部分的递归实现都有对应的非递归解决方案...

  • 2018-10-28

    递归函数 标签(空格分隔): 重新理解一遍递归   首先,使用递归函数需要防止栈溢出。因为在计算机中函数的调用是通...

  • Python学习之路(递归函数)

    函数之 递归函数 小结 使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。针对尾递归优化的语言可以通...

  • python学习4

    学廖雪峰老师的python教程笔记。 1、递归函数 函数内部调用该函数本身,比循环逻辑简单 注意防止栈溢出 尾递归...

网友评论

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

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