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

微信小程序推送服务通知需要收集足够的formid,使用过程中发现如果formid大量失效,在使用递归从redis从获取可用formid的时候会导致栈溢出问题,下面方法是使用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利用高阶函数消除递归,解决递归栈溢出问题)