ホームページ  >  に質問  >  本文

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);
            
        }
    }
PHPzPHPz2765日前622

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-18 10:53:48

    絶対にそうではありません。自分で小さなデモを作成して試してみると、どれを使用してもif 换成 while,都会导致无限循环 —— 因为如果链表长度不为 0 的话,则肯定存在 headNode 不为 null,那么如果第一个 ifwhile,那么就会无限循环;如果链表长度大于 1 的话,则肯定存在 headNode.next 不为 null,那么如果第二个 ifwhile無限ループに陥ることがわかります。

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:53:48

    ifは条件判定、whileはループ構造です。 1 つは 1 回のみ実行され、もう 1 つは条件が false になるまで複数回実行されます。

    返事
    0
  • PHPz

    PHPz2017-04-18 10:53:48

    再帰とは、if と while の違いは、コードが実行されるかどうかに関係なく、if は 1 回だけ判断され、if は再度判断するために戻って判断されることはないということです (「決して振り返らない」という人もいます)。
    while 式が true の場合、条件が満たされなくなるまで何度も遡って判定します (戻って再度判定します)。

    リンクされたリストの値が 1、2、3、4 の場合、if を使用すると、1、2、3、4 が通常の出力として出力されます。
    while では、最初の 1 が空ではないため、最初の while (headNode.next!=null) 条件が常に true になり、無限ループが作成されます。
    私の言ったことが正しければ、採用していただけると幸いです、ありがとうございます!

    返事
    0
  • キャンセル返事