Jeśli masz algorytmy deterministyczne, za każdym razem, gdy zapewniasz równe dane wejściowe, powinieneś otrzymywać równe wyniki, a jeśli tak jest, a proces przejścia od danych wejściowych do wyjściowych jest bardzo czasochłonny, możesz użyć zapamiętywania lub warstw pamięci podręcznej. Podstawową ideą jest to, że przechowujesz kilka kopii danych wejściowych i wyjściowych, a za każdym razem, gdy dane wejściowe są wysyłane do funkcji, przed obliczeniem danych wyjściowych, sprawdzasz, czy dane wyjściowe tego konkretnego wejścia zostały wcześniej obliczone. Jeśli tak, wyślij to, zamiast wykonywać całą pracę ponownie. Oznacza to, że dane wyjściowe dla każdego wejścia należy obliczać tylko raz. Powinieneś spróbować zaimplementować taką warstwę w funkcji fibonacci_recursive() utworzoną na początku , aby zobaczyć, jak duży wpływ mogą mieć tego rodzaju techniki, nawet przy użyciu powolnych algorytmów. Czasami tego typu techniki są również używane, nawet jeśli dane wyjściowe dla danego wkładu zmieniają się w czasie. Wszystko, co musisz zrobić w takich przypadkach, to zapewnić mechanizm, który unieważni lub usunie przechowywaną relację wejście / wyjście po określonym czasie, tak aby została ponownie obliczona następnym razem, gdy dane wejściowe zostaną użyte.