tôi đã tạo ra một hàm memoized của phiên bản đệ quy của fibonacci. Tôi sử dụng điều này làm ví dụ cho các loại chức năng khác có thể sử dụng tính năng ghi nhớ. thực hiện của tôi là xấu vì nếu tôi đưa nó vào trong thư viện, đó có nghĩa là biến global
vẫn thấy ..Memoizing chức năng fibonacci trong php
Đây là đệ quy ban chức năng fibonacci:
function fibonacci($n) {
if($n > 1) {
return fibonacci($n-1) + fibonacci($n-2);
}
return $n;
}
và tôi sửa đổi nó vào một phiên bản được ghi nhớ:
$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;
}
}
Tôi cố tình không sử dụng phương pháp lặp lại khi triển khai mã fibonacci. Có cách nào tốt hơn để ghi nhớ hàm fibonacci trong php? Bạn có thể đề xuất tôi cải tiến tốt hơn không? Tôi đã nhìn thấy func_get_args()
và call_user_func_array
như một cách khác nhưng tôi dường như không thể biết những gì là tốt hơn?
Vì vậy, câu hỏi chính của tôi là: Làm thế nào tôi có thể memoize chức năng fibonacci trong php đúng cách? hoặc cách tốt nhất trong memoizing chức năng fibonacci trong php là gì?
qua '$ ghi nhớ 'như một tham số của' fibonacciMemo'? mặc dù là ít hơn nhiều thanh lịch :( –
tốt, tôi nghĩ rằng đó là tốt quá, nhưng những gì tôi đang tìm kiếm là việc thực hiện tốt nhất cho đến nay cho chức năng này .. :) – catzilla
Hãy nhìn vào [memoized] (https: // github Hàm .com/ihor/Nspl # memoizedfunction) từ [Nspl] (https: // github.com/ihor/Nspl) –