-1
votes

Comment réparer l'exécution de ce code de récursivité?

Dans ce problème de la matrice de base, j'ai besoin d'ajouter la somme ou la valeur de l'index précédent du tableau à la valeur d'index de courant à l'aide de la récursion.

Par exemple, {5,3,1,2 } code> devient {5,8,9,11} code>. p>

Étant donné que l'index 0ème est le premier index afin qu'il reste tel qu'il est. P> Je pense que mon code est correct mais le pointeur d'instructions ne circule pas en fonction de mon exécution à sec et de la déclaration de retour (pour la condition de base) ne s'exécute pas. Depuis que j'ai mon code en Java, après avoir ajouté la capture d'essai, je reçois la production comme prévu. Mais l'ajout de la capture d'essai n'est pas la solution. P>

class kr1
{
    public static void main(String[] args) {
        int a[]= {5,1,3,9,5};
        a=addr (a,0,a.length);
        for (int i:a)
            System.out.print (i +" ");
    }

    static int[] addr(int a[],int i,int n)
    {
        if (i==0)
            addr(a,i+1,n);
        if (i==n-1)
        {
            a[i] = a[i]+a[i-1];
            return a ; //this return statement is not executing
        }
             //this below part is executing even if i has reached to n-1
        a[i] = a[i] + a[i-1];
        addr(a,i+1,n);
        return a;
    }
   }


0 commentaires

3 Réponses :


2
votes
class kr1
{
    public static void main(String[] args) {
        int a[]= {5,1,3,9,5};
        addr (a,0,a.length);
        for (int i:a)
            System.out.print (i +" ");
    }

    static void addr(int a[],int i,int n)
    {
        if (i==0)
            addr(a,i+1,n);
            return;
        if (i==n-1)
        {
            a[i] = a[i]+a[i-1];
            return;
        }
        a[i] = a[i] + a[i-1];
        addr(a,i+1,n);
    }
   }

1 commentaires

c'était une erreur idiote faite par moi.. et pour la méthode de retour de la valeur de retour .. Vous êtes correct..Je utilisait initialement de Void..mais quand je n'aurais pas reçu le résultat attendu..Je essayait de renvoyer le tableau



0
votes
static int[] addr(int a[],int i,int n)
{
    if (i==0)
        return addr(a,i+1,n);
    if (i==n-1)
    {
        a[i] = a[i]+a[i-1];
        return a ; //this return statement is not executing
    }
    //this below part is executing even if i has reached to n-1
    a[i] = a[i] + a[i-1];
   return addr(a,i+1,n);
}
In recursion when recalling the function, you should return the value of the function call, you didn't do that. So I just added a return to the recalling functions and it worked. Also, check your algorithm, it fails when the length if the array is one, you could add a simple check to ensure that when the array size is 1 or zero the array is returned back and no manipulation is done to the array. Cheers.

1 commentaires

Vous avez raison..my algorithme est faux pour la taille de la matrice 1 ou 0 :) .. je vais le corriger



0
votes

Changer simplement cette partie de votre code xxx

à celui-ci xxx


0 commentaires