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));
}
}
4 Réponses :
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: p> et p> . p> Il fait alors le même processus sur le Pyramides plus petites (je vais simplement le faire avec le top One): p> et p> . p>. 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. P> Finalement, nous arrivons au sommet par une force brute vérifiant chaque piste de la pyramide. p> (Incidemment, le même problème est sur Projeceuer.net) P> P> >
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 ...: ... et c'est tout! < / p> p>
essentiellement, cela continue à s'appeler jusqu'à atteindre la troisième itération ( donc, voici le flux (moins les deux appels vers x == 3 code>). maxsum code > dans max code> ... pour SIMPLICITY'S SAKE) (chaque indent est un appel à maxum code>): p>
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. P>
Non. La curiosité d'apprendre quelque chose de nouveau.