de manière récursive la somme des entiers dans un tableau
J'ai un programme que je suis en train de faire pour la classe qui retourne la somme de tous les entiers dans un tableau en utilisant la récursivité. Voici mon programme à ce jour:
public class SumOfArray {
private int[] a;
private int n;
private int result;
public int sumOfArray(int[] a) {
this.a = a;
n = a.length;
if (n == 0) //base case
result = 0;
else
result = a[n] + sumOfArray(a[n-1]);
return result;
} //End SumOfArray method
} //End SumOfArray Class
Mais je suis de trois erreurs qui sont liées, je crois, mais je ne peux pas comprendre pourquoi c'est de trouver un type de null:
SumOfArray.java:25: sumOfArray(int[]) in SumOfArray cannot be applied to (int)
result = a[n] + sumOfArray(a[n-1]);
^
SumOfArray.java:25: operator + cannot be applied to int,sumOfArray
result = a[n] + sumOfArray(a[n-1]);
^
SumOfArray.java:25: incompatible types
found : <nulltype>
required: int
result = a[n] + sumOfArray(a[n-1]);
^
3 errors
- En utilisant la récursivité n'est pas seulement plus compliqué, mais beaucoup plus lente dans ce cas. Je suppose que c'est juste un exercice.
Vous devez vous connecter pour publier un commentaire.
La solution est plus simple qu'il n'y paraît, essayez ceci (en supposant un tableau avec les non-longueur zéro):
L'appeler comme ceci:
Le problème est que
a[n-1]
est unint
, alors quesumOfArray
attend un tableau deint
.Astuce: vous pouvez simplifier les choses en les faisant
sumOfArray
prendre le tableau et le début (ou la fin) de l'indice.est l'obtention de l'int à n-1, et non pas la matrice de 0 à n-1.
essayez d'utiliser
au lieu
Arrays#CopyOfRange
trop.a[n-1]
à faire.a
est unint
tableau. Ainsia[n-1]
est unint
. Vous êtes de passage à unint
àsumOfArray
qui attend un tableau et non uneint
.À essayer si vous ne voulez pas passer la longueur de la table :
Offcourse vous devez vérifier si le tableau est vide ou pas.
C'est la seule solution récursive avec une complexité O(N).et avec un paramètre d'entrée d'Un[] seulement.
Vous pouvez gérer nulle et vide(de longueur 0) cas particulier comme Son retour 0 dans cette solution. Vous jetez Exception dans ce cas.
Comment de cette solution récursive? Vous faites un petit sous-ensemble qui contient les éléments de la deuxième à la fin. Cette récursivité continue jusqu'à ce que la taille de la matrice est 1.
Version simplifiée: