Maison  >  Questions et réponses  >  le corps du texte

java - if与while的区别?

在《剑指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);
            
        }
    }
PHPzPHPz2716 Il y a quelques jours599

répondre à tous(3)je répondrai

  • PHP中文网

    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.

    répondre
    0
  • 迷茫

    迷茫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.

    répondre
    0
  • PHPz

    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 !

    répondre
    0
  • Annulerrépondre