Я полностью переписал этот вопрос, так как первоначальный был неразрешим. Для простоты я использую числа Фибоначчи в качестве игрушечного примера.
Тривиальное рекурсивное кэшированное вычислениезаканчивается очень длинной трассировкой стека, как и ожидалось. Вот почему я хотел бы иметь абстрактный класс, например IterativeLoadingCache, который я мог бы расширить как здесьчем-то вроде
@Override
protected Integer computeNonRecursivelly(Integer key) {
final Integer x1 = getOrEnqueue(key-1);
final Integer x2 = getOrEnqueue(key-2);
if (x1==null) return null;
if (x2==null) return null;
return x1+x2;
}
и который позаботится обо всем кэшировании и вычислениях без использования рекурсии.
Я действительноне ищу эффективного вычисления чисел Фибоначчи. Мне нужно что-то, позволяющее использовать кеширование вместе с рекурсивными функциями, где глубина рекурсии может быть произвольно большой.
У меня уже есть какое-то решение, но оно довольно неэффективно и очень уродливо, поэтому я надеюсь получить хороший совет. Мне также любопытно, нужно ли это кому-то еще или, может быть, уже реализовано.