Mathematica имеет очень удобный способ создания заметок, опираясь на тот факт, что хеши и вызовы функций используют один и тот же синтаксис:
triangle[0] = 0;
triangle[x_] := triangle[x] = x + triangle[x-1]
Вот и все. Это работает, потому что правила для вызовов функций сопоставления с образцом таковы, что он всегда использует более конкретное определение перед более общим определением.
Конечно, как уже указывалось, этот пример имеет решение в закрытой форме: triangle[x_] := x*(x+1)/2
. Числа Фибоначчи - классический пример того, как добавление памятных записок дает резкое ускорение:
fib[0] = 1;
fib[1] = 1;
fib[n_] := fib[n] = fib[n-1] + fib[n-2]
Хотя это также имеет эквивалент в замкнутой форме, хотя и более сложный: http://mathworld.wolfram.com/FibonacciNumber.html
Я не согласен с человеком, который предположил, что это неуместно для запоминания, потому что вы можете «просто использовать цикл». Точка запоминания заключается в том, что любые повторные вызовы функций выполняются за время O (1). Это намного лучше, чем O (n). Фактически, вы могли бы даже придумать сценарий, в котором запомненная реализация имеет лучшую производительность, чем реализация в закрытой форме!