जावा भाषा में सरणी में सभी तत्वों का योग प्राप्त करें

मेरा कोड यहाँ है:

public int sum(int[] array, int index) 
  {
    //int index is the number of elements in the array. 
       //Here is my base case:
    if (index == 0)
        return 0;
    //Now it's time for the recursion
    else
        return array[index] + sum(array, index + 1);
}

मैं बाध्य त्रुटि से बाहर निकलना जारी रखता हूं, लेकिन मैं नहीं करता कि मैं गलत क्या कर रहा हूं।

0
जोड़ा संपादित
विचारों: 1
आपकी स्टॉप हालत कहां है? आपके पास एक नहीं है और आप बढ़ते सूचकांक को जारी रखते हैं।
जोड़ा लेखक Alexis C., स्रोत

5 उत्तर

आपकी आधार स्थिति दोषपूर्ण है। यह होना चाहिए:

if (index == array.length)

नोट, आपको पहले कॉल पर index = 0 पास करने की आवश्यकता है। यदि आप index = array.length - 1 गुजर रहे हैं, तो आधार केस को जैसा रखें, और अनुक्रमणिका - 1 को पास करने के लिए रिकर्सिव विधि आमंत्रण को बदलें < कोड> अनुक्रमणिका + 1 </कोड>।

हालांकि, क्या आपको वास्तव में रिकर्सन की आवश्यकता है? मैं इस कार्य के लिए लूप के बजाय रिकर्सन के लिए पहुंचने से पहले सैकड़ों विचारों को गंभीरता से दूंगा।

8
जोड़ा

प्रयत्न,

public static void main(String[] args){
    int arr[] = {3, 4, 6, 7};
    System.out.println(sum(arr, arr.length-1));

}

public static int sum(int[] array, int index) {
    if (index == 0) {
        return array[0];
    } else {
        return array[index] + sum(array, index - 1);
    }
}
2
जोड़ा
यदि अनुक्रमणिका सरणी में तत्वों की संख्या है, तो योग ({9}, 1) अनुक्रमणिका से बाहर सूचकांक फेंक देगा: सरणी [1] + योग (सरणी, 0)। सरणी में केवल एक तत्व है, सरणी [1] मौजूद नहीं है।
जोड़ा लेखक Eric.K.Yung, स्रोत
सरणी के बारे में क्या खाली है। आपके पास ऋणात्मक सूचकांक है।
जोड़ा लेखक Eric.K.Yung, स्रोत
मेरी मुख्य विधि को देखो। यह योग ({9}, 0) होना चाहिए
जोड़ा लेखक Masudul, स्रोत

0 से उच्चतम इंडेक्स तक जाने के बजाय, उच्चतम इंडेक्स से 0 तक जाएं, मैंने किया (इंडेक्स -1) क्योंकि आपने कहा कि इंडेक्स कुल तत्व है, इसलिए यदि सरणी में 10 तत्व हैं, तो अंतिम तत्व में इंडेक्स 9 है

public int sum(int[] array, int index) 
  {
    //int index is the number of elements in the array. 
       //Here is my base case:
    if (index == 0)
        return 0;
    //Now it's time for the recursion
    else
        return array[index-1] + sum(array, (index - 1);
}
1
जोड़ा

यदि आप जावा 1.8 का उपयोग कर रहे हैं तो आप निम्न कार्य कर सकते हैं

public int sum(int[] array) 
{
     return (int)array.stream().sum();
}

या और भी

public int sum(int[] array) 
{
     return (int)array.sum();
}
0
जोड़ा

@ मसूद - आप कोड में एक तार्किक त्रुटि है हालांकि (मैं शुरुआती जावा हूं इसलिए क्षमा करें अगर मैं गलत हूं)।

return array[index] + sum(array, index - 1);

     array[index]    

इंडेक्स 0 से शुरू होने पर आउट-ऑफ-बाउंड त्रुटि प्राप्त होगी - इसलिए इसका अर्थ है कि वहां कोई अनुक्रमणिका नहीं होगी। 'इंडेक्स -1' काम करेगा। साथ ही, यह आपके बेस केस को '0' वापस करने के लिए बदल देगा क्योंकि रीटर्निंग सरणी [0] में सरणी [0] दो बार और गलत राशि होगी।

यह मेरा कोड है:

public static int sumArrayRecursion(int array[], int n){
    if (n == 0){
        return 0;
    }
    else {
        return array[n-1] + sumArrayRecursion(array, n-1);
    }
}   
0
जोड़ा