Ćwiczenie 8.5:
Napisz funkcję cached(cache, fun)
, która tworzy cache'owaną wersję rekurencyjnej funkcji fun
. Pierwszym argumentem funkcji jest tablica cache
, zawierająca kilka początkowych wartości funkcji. Drugim argumentem jest definicja funkcji rekurencyjnej fun
. Przy obliczeniu funkcja cache'owana powinna pobrać wartość z cache'a. Jeżeli w cahce'u danej wartości brak, to wówczas trzeba skorzystać z definicji funkcji fun
, oraz zapamiętać obliczoną wartość w cache'u.
Przykładowo,
var fibonacci = cached([0, 1], function (recur, n) { return recur(n - 1) + recur(n - 2); });powinno obliczać liczby Fibonacciego.
var factorial = cached([1], function (recur, n) { return recur(n - 1) *n; });powinno obliczać silnię.
W szczególności,
console.log(fibonacci(5));
wyświetli 5