Maison > Questions et réponses > le corps du texte
在《剑指offer》的面试题5:“从尾到头打印链表”,在使用递归时,为什么不能用while来代替if?
public static void printListReverse_recursively(listNode headNode){
if(headNode!=null)
{
if(headNode.next!=null)
{
printListReverse_recursively(headNode.next);
}
System.out.println(headNode.data);
}
}
PHP中文网2017-04-18 10:53:48
Certainement pas - vous pouvez écrire vous-même une petite démo et vous saurez si vous l'essayez. Peu importe lequel if
est remplacé par while
, cela mènera à une boucle infinie - car si la longueur du lien est longue. list n'est pas 0, alors il doit y avoir headNode mais pas null
, alors si le premier if
est while
, alors il y aura une boucle infinie si la longueur de la liste chaînée est ; supérieur à 1, alors il doit y avoir headNode.next n'est pas null
, alors si le deuxième if
est while
, cela provoquera une boucle infinie.
迷茫2017-04-18 10:53:48
if est un jugement conditionnel, while est une structure en boucle. L’un ne sera exécuté qu’une seule fois et l’autre sera exécuté plusieurs fois jusqu’à ce que la condition soit fausse.
PHPz2017-04-18 10:53:48
La récursion est que la différence entre if et while est que if ne sera jugé qu'une seule fois, que le code soit exécuté ou non, if ne reviendra pas pour juger à nouveau (certaines personnes disent "ne regarderont jamais en arrière").
Si l'expression while est vraie, elle regardera en arrière et jugera plusieurs fois (reviendra en arrière et jugera à nouveau) jusqu'à ce que la condition ne soit pas remplie.
Supposons que les valeurs de la liste chaînée soient 1, 2, 3, 4 ; si vous utilisez if, 1, 2, 3, 4 sera affiché en sortie normale.
Lors de l'utilisation de while, le premier 1 n'est pas vide, ce qui fait que la première condition while (headNode.next!=null) est toujours vraie, ce qui créera une boucle infinie.
Si ce que j'ai dit est correct, j'espère qu'il sera adopté, merci !