Процедуры и функции

//Кэш готовых значений передаём параметром:
//Соответствие идёт по ссылке, поэтому
//накопленное видно и снаружи
Кэш = Новый Соответствие;

Ф30 = Фибоначчи(30, Кэш);
//Ф30 = 832040

//В кэше по записи на каждое значение
//от 2 до 30
Сообщить("В кэше: " + Кэш.Количество());
//Сообщает: В кэше: 29

//Без кэша этот же расчёт делает
//2 692 537 вызовов вместо 59

Функция Фибоначчи(Номер, Кэш)
    Если Номер < 2 Тогда
        Возврат Номер;
    КонецЕсли;

    Готовое = Кэш.Получить(Номер);
    Если Готовое <> Неопределено Тогда
        Возврат Готовое;
    КонецЕсли;

    Итог = Фибоначчи(Номер - 1, Кэш) +
        Фибоначчи(Номер - 2, Кэш);
    Кэш.Вставить(Номер, Итог);

    Возврат Итог;
КонецФункции