Stworzyłem zapamiętaną funkcję rekurencyjnej wersji fibonacci. Używam tego jako przykładu dla innych rodzajów funkcji, które używają notowania. Moja implementacja jest złe, ponieważ jeśli umieścić go w bibliotece, co oznacza, że zmienna global
jest nadal postrzegane ..Funkcja memoizing fibonacci w php
Jest to oryginalna rekurencyjna funkcja Fibonacci:
function fibonacci($n) {
if($n > 1) {
return fibonacci($n-1) + fibonacci($n-2);
}
return $n;
}
i modyfikować go do wersja zapamiętana:
$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;
}
}
Celowo nie użyłem metody iteracyjnej w implementacji fibonacci. Czy istnieją lepsze sposoby na zapamiętanie funkcji fibonacci w php? Czy możesz zaproponować mi lepsze ulepszenia? Widziałem func_get_args()
i call_user_func_array
jako inny sposób, ale nie mogę wydawać się wiedzieć, co jest lepsze?
Moje główne pytanie brzmi: Jak mogę poprawnie zapamiętać funkcję fibonacci w php? lub Jaki jest najlepszy sposób na zapamiętanie funkcji fibonacci w php?
przechodzącego '$ notatka "jako parametr' fibonacciMemo'? chociaż jest znacznie mniej elegancki :( –
cóż, myślę, że to również możliwe, ale to, czego szukam, jest jak dotąd najlepszą implementacją tej funkcji .. :) – catzilla
Zobacz [memoised] (https: // github .com/ihor/Nspl # memoizedfunction) funkcja z [Nspl] (https: // github.com/ihor/Nspl) –