मैं रिकर्सिवली फिबोनैकी संख्या की गणना, एक ConcurrentHashMap
और computeIfAbsent()
विधि के साथ के लिए एक कार्यक्रम लिखा था 10 to 20
से कार्यक्रम कभी नहीं रुकतीConcurrentHashMap और फाइबोनैचि संख्या असंगत परिणाम
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);
});
}
}
कुछ एक मुझे बता सकते हैं क्यों यह हमेशा के लिए अटक जा रहा है?
आपके पास नीचे स्पष्टीकरण है, लेकिन मैंने रिकर्सिव फिबोनाकी के बारे में जो कहा वह मान्य है; यदि आपको वास्तव में उच्च अनुक्रम Fibonacci संख्या उत्पन्न करने की आवश्यकता है तो गतिशील प्रोग्रामिंग का उपयोग करें। –
@ टिमबीजलेसेन- हाँ मैं करूँगा .. मैं बस समवर्ती हैश मानचित्र के साथ खेल रहा था और पाया ... :) –
@ टिमबीजलेसेन ओपी गतिशील प्रोग्रामिंग कर रहा था, केवल एक स्पष्ट तरीके से। फाइबोनैकी संख्या की प्रत्येक अवधि केवल गणना की जाती है अगर इसे पहले गणना नहीं की जाती है। यदि इसे पहले से गणना की गई थी, तो मान 'समवर्ती मैप' –