java - if与while的区别?
PHPz
PHPz 2017-04-18 10:51:48
0
3
645

在《剑指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);
            
        }
    }
PHPz
PHPz

学习是最好的投资!

全員に返信(3)
洪涛

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

いいねを押す +0
迷茫

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

いいねを押す +0
PHPzhong

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート