Trouver la somme de tous les éléments dans le tableau de manière récursive en langage java

Voici mon code:

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);
}

Je continue d'avoir une erreur hors limites, mais je ne fais pas ce que je fais de mal.

0
ajouté édité
Vues: 1
Où est votre condition d'arrêt? Vous n'en avez pas et vous continuez d'augmenter l'indice.
ajouté l'auteur Alexis C., source

5 Réponses

Votre condition de base est défectueuse. CA devrait etre:

if (index == array.length)

Notez que vous devez passer index = 0 au premier appel. Si vous passez index = array.length - 1 , conservez le cas de base tel quel et modifiez l'invocation de la méthode récursive pour passer index - 1 , au lieu de < code> index + 1 .

Cependant, avez-vous vraiment besoin d'une récursivité? Je voudrais sérieusement lui donner des centaines de pensées avant d'atteindre la récursivité au lieu de boucle pour cette tâche.

8
ajouté

Essayer,

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
ajouté
Si index est le nombre d'éléments dans le tableau, sum ({9}, 1) mettrait l'index hors de portée: array [1] + sum (array, 0). Il n'y a qu'un seul élément dans le tableau, le tableau [1] n'existe pas.
ajouté l'auteur Eric.K.Yung, source
Qu'en est-il du tableau vide? vous avez un indice négatif.
ajouté l'auteur Eric.K.Yung, source
Regardez ma méthode principale. cela devrait être sum ({9}, 0)
ajouté l'auteur Masudul, source

au lieu d'aller de 0 à l'indice le plus élevé, passez de l'indice le plus élevé à 0, je l'ai fait (index -1) parce que vous avez dit que l'index est total, donc si le tableau a 10 éléments, le dernier élément

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
ajouté

Si vous utilisez Java 1.8, vous pouvez effectuer les opérations suivantes

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

ou même

public int sum(int[] array) 
{
     return (int)array.sum();
}
0
ajouté

@ Masud - vous êtes code a une erreur logique si (je suis débutant Java si désolé si je suis incorrect).

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

     array[index]    

recevra une erreur hors-limites lorsque l'index commencera à 0, ce qui signifie qu'il n'y aura pas d'index. 'index - 1' fonctionnerait. En outre, cela modifierait votre cas de base pour renvoyer '0' car le tableau de retour [0] aura le tableau [0] ajouté deux fois et une somme incorrecte.

C'est mon code:

public static int sumArrayRecursion(int array[], int n){
    if (n == 0){
        return 0;
    }
    else {
        return array[n-1] + sumArrayRecursion(array, n-1);
    }
}   
0
ajouté