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

在《剑指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

学习是最好的投资!

membalas semua(3)
洪涛

Sudah tentu tidak - anda boleh menulis demo kecil sendiri dan anda akan tahu jika anda mencubanya Tidak kira yang mana if digantikan dengan while, ia akan membawa kepada gelung tak terhingga - kerana jika panjang dipautkan. senarai bukan 0, maka mesti ada headNode tetapi bukan null, maka jika if pertama ialah while, maka akan ada gelung tak terhingga jika panjang senarai terpaut itu lebih besar daripada 1, maka mesti ada headNode.next bukan null, maka jika if kedua ialah while, ia akan menyebabkan gelung tak terhingga.

迷茫

jika ialah penghakiman bersyarat, manakala struktur gelung. Satu hanya akan dilaksanakan sekali, dan satu lagi akan dilaksanakan beberapa kali sehingga syarat itu palsu.

PHPzhong

Rekursi ialah perbezaan antara if dan while ialah if hanya akan dinilai sekali, tidak kira sama ada kod itu akan dilaksanakan, jika tidak akan kembali untuk menilai lagi (sesetengah orang berkata "tidak akan melihat ke belakang").
Jika ungkapan while itu benar, ia akan melihat ke belakang dan menilai beberapa kali (kembali dan menilai semula) sehingga syarat tidak dipenuhi.

Jika nilai dalam senarai terpaut adalah 1, 2, 3, 4 menggunakan jika, 1, 2, 3, 4 akan menjadi output sebagai output biasa.
Apabila menggunakan while, 1 pertama tidak kosong, yang menyebabkan keadaan while pertama (headNode.next!=null) sentiasa benar, yang akan mencipta gelung tak terhingga.
Sekiranya apa yang saya katakan itu betul, saya harap ia akan diterima pakai, terima kasih!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan