Вы не могли бы хотя бы намекнуть какую часть из вашего конечного решения мне можно просто прилепить к своей?
Ну идея такая, что при вычислении
a(n) надо проверить не вычислялось ли это раньше.
Для этого создается сперва пустая карта (словарь)
M куда будут запоминаться ранее вычисленные значения в виде пар
n,a(n)Создаем карту
M=map()Проверка вычислялась ли уже
a(n) делается так.
Внутри функции
a() определяем переменную
res -- в неё будем записывать результат.
Проверяем
if(mapisdefined(M,n,&res),return(res)) -- да, вычисляли. Тогда сразу же аозвращаем ранее вычисленное значение
Дальше собсно вычисляем
a(n), результатом будет наша
resКогда вычислили, перед возвратом запоминаем результат в карту:
mapput(M,n,res)После чего возвращаем результат вычисления
a(n).
return(res)Недостаток тут в том, что в функции
a() используется глобальная переменная
M. За этим надо следить -- создать её например, обнулить где-то потом и т.п.
О том как этого избежать, вторая ссылка. Это акттуально для рекурсивных функций, для нерекурсивных вполне можно следить за словарём в стороне.