我创建了一个斐波那契递归函数的记忆化版本。
我将其用作其他需要使用记忆化的函数的示例。
我的实现很差,因为如果我将其包含在库中,那么就意味着全局变量仍然可见。
这是原始的递归斐波那契函数:
function fibonacci($n) {
if($n > 1) {
return fibonacci($n-1) + fibonacci($n-2);
}
return $n;
}
我将其修改为一个记忆化版本:
$memo = array();
function fibonacciMemo($n) {
global $memo;
if(array_key_exists($n, $memo)) {
return $memo[$n];
}
else {
if($n > 1) {
$result = fibonacciMemo($n-1) + fibonacciMemo($n-2);
$memo[$n] = $result;
return $result;
}
return $n;
}
}
我在实现斐波那契数列时故意没有使用迭代方法。有没有更好的方法来记忆化php中的斐波那契函数?你能给我提供更好的改进建议吗?我看到了func_get_args()
和call_user_func_array
作为另一种方式,但我似乎不知道哪种更好?
所以我的主要问题是:如何正确地在php中进行斐波那契函数的记忆化?或者在php中记忆化斐波那契函数的最佳方法是什么?
$memo
作为fibonacciMemo
的参数传递?虽然不太优雅 :( - Robin Curbelo