>  Q&A  >  본문

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일 전594

모든 응답(3)나는 대답할 것이다

  • PHP中文网

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

    확실히 그렇지 않습니다. 작은 데모를 직접 작성해 보면 알 수 있습니다. 어떤 ifwhile으로 대체되더라도 무한 루프로 이어질 것입니다. 목록이 0이 아니면 headNode는 있어야 하지만 null는 없어야 합니다. 그러면 첫 번째 ifwhile이면 연결된 목록의 길이가 다음과 같으면 무한 루프가 발생합니다. 1보다 크면 headNode.next null가 아니어야 하고, 두 번째 ifwhile이면 무한 루프가 발생합니다.

    회신하다
    0
  • 迷茫

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

    if는 조건부 판단이고 while은 루프 구조입니다. 하나는 한 번만 실행되고, 다른 하나는 조건이 거짓이 될 때까지 여러 번 실행됩니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:53:48

    재귀는 if와 while의 차이점은 if는 코드 실행 여부에 관계없이 한 번만 판단되고 if는 다시 판단으로 돌아가지 않는다는 것입니다(어떤 사람들은 "절대로 뒤돌아보지 않을 것입니다"라고 말합니다).
    while 표현식이 true이면 조건이 충족되지 않을 때까지 여러 번 되돌아보고 판단합니다(돌아가서 다시 판단).

    연결리스트의 값이 1, 2, 3, 4라고 가정하고, if를 사용하면 1, 2, 3, 4가 정상적으로 출력됩니다.
    while을 사용하면 첫 번째 1이 비어 있지 않으므로 첫 번째 while(headNode.next!=null) 조건이 항상 true가 되어 무한 루프가 생성됩니다.
    제가 말한 내용이 맞다면 채택되길 바라겠습니다. 감사합니다!

    회신하다
    0
  • 취소회신하다