• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

재귀 이진수 변환 출력이 강의와 다릅니다

22.07.18 08:29 작성 조회수 161

0

  • public class Example02 {
    	public static void main(String[] args) {
    		int n = 11; //이진수 : 1011
    		recursion(n);
    	}
    	
    	static void recursion(int n) {
    		if(n/2 == 0) {
    			return;
    		}
    		recursion(n/2);
    		System.out.print(n%2);
    	}
    }

 

안녕하세요 강사님,

위는 제가 작성한 코드 입니다.

코드 상 강사님이 작성하신 코드와 출력이 다를 이유는 없다고 생각이 드는데, 제 출력값은 항상 1011 이 아닌,

011이 나오네요...

 

조금 수정해서,

위 소스코드의 if 문을

 

if( n/2 == 0 && n%2 ==1) {

    System.out.print(1);

    return;

}

으로 변경하니, 정상적인 결과가 출력 되었습니다.

 

혹시 이건 왜그런지 알 수 있을까요?

위 소스코드는 강의의 코드와 출력이 다르게 나올 이유가 없을것 같은데, 출력이 달라서요

 

강의가 알고리즘을 공부하는데 참 많은 도움이 됩니다.

감사합니다.

답변 1

답변을 작성해보세요.

0

recursion(11)(출력o) -> recursion(5)(출력o) -> recursion(2)(출력o) -> recursion(1)(출력o) -> recursion(0)(출력x).

재귀가 이런식으로 n이 0에 도달 할 때, 재귀 탈출을 시작해야 하는데, 작성하신 코드는 recursion(1)에서 탈출을 시작합니다.

재귀 탈출 조건문을 if(n == 0)으로 바꾸시면 될 듯 합니다.