8
votes

Comprendre la récursion en Java

Je suis difficile de comprendre le code suivant en fonction de l'algorithme de récursivité en Java. Je ne comprends pas, quelle est la valeur différente x code> et y code> ont quand ils appellent les uns dans les autres? J'ai essayé d'obtenir la bonne valeur en appelant system.out.print () code> dans un code, mais n'a toujours aucune aide.

public class RecursionExample
{

    private static int[][] arr={
        {3},
        {7, 4},
        {2, 4, 6},
        {8 ,5, 9, 3}
    };

    public static int maxSum(int[][] graph, int x, int y, int sum) {
        if (x == 3) 
        {
            return sum+graph[x][y];
        }
        int max= Math.max(maxSum(graph, x+1, y, sum), maxSum(graph, x+1, y+1, sum));

        sum += graph[x][y];
        return sum+max;
    }

    public static void main(String[] ar)
    {
        System.out.println(maxSum(arr,0,0,0));
    }
}


1 commentaires

Non. La curiosité d'apprendre quelque chose de nouveau.


4 Réponses :


1
votes

Les valeurs X et Y que vous parlez du lien vers des nombres spécifiques dans la pyramide numérique.

Quel est votre algorithme trouver le chemin maximum dans la pyramide en ajoutant sur le chiffre supérieur, puis divisez la grande pyramide en deux celles plus petits: xxx

et xxx

.

Il fait alors le même processus sur le Pyramides plus petites (je vais simplement le faire avec le top One): xxx

et xxx

. .

Maintenant, vous pouvez voir que lorsqu'il enfreint ces pyramides, il vient de laisser 2 chiffres, de sorte qu'il les renvoie. Comme il monte la pile, il compare les valeurs retournées et renvoie le plus grand.

Finalement, nous arrivons au sommet par une force brute vérifiant chaque piste de la pyramide.

(Incidemment, le même problème est sur Projeceuer.net) >


0 commentaires

0
votes

Les valeurs de x et y sont faciles comme des arguments - il suffit de regarder les nombreux appels vers maxsum: Au début, ils sont 0 et 0, à chaque étape suivante x + 1 et y + 1 (et x +1 et Y) WRT L'étape précédente, arrêtez-vous lorsque X devient 3. Ainsi, faites une table, ou plutôt un arbre ...: XXX

... et c'est tout! < / p>


0 commentaires

4
votes

essentiellement, cela continue à s'appeler jusqu'à atteindre la troisième itération ( x == 3 ).

donc, voici le flux (moins les deux appels vers maxsum dans max ... pour SIMPLICITY'S SAKE) (chaque indent est un appel à maxum ): xxx


0 commentaires

1
votes

Le moyen le plus simple de comprendre ce qui se passe sur une fonction récursive consiste à sortir un crayon et de papier et en écrivant chaque étape jusqu'à ce que vous arriviez dans le boîtier de base (dans cette équation, lorsque X == 3). Travaillez ensuite à l'envers, branchez les valeurs retournées dans les étapes précédentes. Ce que vous avez ici, c'est la récursion de la tête, une situation où le temps d'exécution doit résoudre chaque étape et revenir de chaque étape jusqu'à ce qu'il redevienne à l'appel d'origine à quelle heure, vous avez votre réponse.


0 commentaires