Bien que je n'aie aucun problème à comprendre la récursion, je ne parviens pas à comprendre la solution récursive du problème de la tour de Hanoi. Voici le code de Wikipedia :
procedure Hanoi(n: integer; source, dest, by: char);
Begin
if (n=1) then
writeln('Move the plate from ', source, ' to ', dest)
else begin
Hanoi(n-1, source, by, dest);
writeln('Move the plate from ', source, ' to ', dest);
Hanoi(n-1, by, dest, source);
end;
End;
Je comprends le cas de base et le concept de décomposer le problème en petits morceaux jusqu'à ce que vous soyez en mesure de déplacer un seul disque. Cependant, je n'arrive pas à comprendre comment les deux appels récursifs dans le cas non basique fonctionnent ensemble. Peut-être quelqu'un peut-il m'aider ? Merci.
3 votes
Ce code pourrait être amélioré en vérifiant si n=0 et en ne faisant rien dans ce cas, pour éviter la duplication du déplacement.
0 votes
Cela pourrait aider : learneroo.com/modules/71/nodes/402
3 votes
J'ai écrit un article de blog sur la récursion elle-même. Il va très loin et, honnêtement, il faut un certain temps pour le comprendre, mais une fois que vous l'avez visualisé, il est beaucoup plus logique. Sérieusement, économisez votre temps et consultez cet article : dima.to/blog/?p=29
0 votes
En fait, l'idée de base est que si nous voulons résoudre le problème pour N disques, nous pouvons réutiliser le problème avec N-1 disques. Le cas de base est lorsque N = 1. J'ai essayé d'expliquer cela dans mon blog en utilisant du code Java. krishnalearnings.blogspot.in/2015/06/
0 votes
Vous pouvez essayer de créer une visualisation comme celle-ci : thewalnut.io/visualizer/visualize/1322/342 pour voir si cela aide à comprendre...
0 votes
Vous devriez vérifier cette réponse en - Tour de Hanoi : Algorithme récursif