Я написал программу для вычисления чисел фибоначчи рекурсивно с помощью метода ConcurrentHashMap
и computeIfAbsent()
:
Программа работает абсолютно нормально, когда я использовал небольшие значения, такие как 8,9,10
, но застрял в бесконечном цикле, когда значение, увеличенное с 10 to 20
, никогда не останавливается
public class Test {
static Map<Integer, Integer> concurrentMap = new ConcurrentHashMap<>();
public static void main(String[] args) {
System.out.println("Fibonacci result for 20 is" + fibonacci(20));
}
static int fibonacci(int i) {
if (i == 0)
return i;
if (i == 1)
return 1;
return concurrentMap.computeIfAbsent(i, (key) -> {
System.out.println("Value is " + key);
return fibonacci(i - 2) + fibonacci(i - 1);
});
}
}
Может кто-нибудь сказать мне, почему он застрял навсегда?