我写了一个使用ConcurrentHashMap
和computeIfAbsent()
方法递归计算斐波那契数列的程序:
当我使用像8,9,10
这样的小值时,程序完全正常工作,但是当值从10到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);
});
}
}
有人能告诉我为什么它一直卡住吗?