实现斐波拉契数列,在用php中用递归的时候会出现超过限制内存的错误提醒。
es6里面有尾递归优化,php里面有什么优化的方式么?
先贴两种网上找到的解决方案,
第一种:http://blog.csdn.net/h3305319...
第二种:https://www.cnblogs.com/zhenb...
第一种利用高阶函数回调方式经过试验还是不可以,不过第二种方案在实现过程中还是可以满足的。
如下图:
好的 那么问题来了,
如何解决不改变内存限制,利用递归实现?
第一种方案为何不行?
第二种为什么又可以了??
第二种方案使用全局变量
$cache
作为缓存,所以再递归中每一个n对应的值只计算一遍,事实上计算fib(x)
只会调用x
次函数,可以在很快的时间和很小的栈空间使用下完成。