Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu596

membalas semua(3)saya akan balas

  • PHP中文网

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

    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.

    balas
    0
  • 迷茫

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

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

    balas
    0
  • PHPz

    PHPz2017-04-18 10:53:48

    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!

    balas
    0
  • Batalbalas