-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
재귀 이진수 변환 출력이 강의와 다릅니다
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;
}
으로 변경하니, 정상적인 결과가 출력 되었습니다.
혹시 이건 왜그런지 알 수 있을까요?
위 소스코드는 강의의 코드와 출력이 다르게 나올 이유가 없을것 같은데, 출력이 달라서요
강의가 알고리즘을 공부하는데 참 많은 도움이 됩니다.
감사합니다.
답변을 작성해보세요.
0
안녕안녕안녕안녕
2022.07.19
recursion(11)(출력o) -> recursion(5)(출력o) -> recursion(2)(출력o) -> recursion(1)(출력o) -> recursion(0)(출력x).
재귀가 이런식으로 n이 0에 도달 할 때, 재귀 탈출을 시작해야 하는데, 작성하신 코드는 recursion(1)에서 탈출을 시작합니다.
재귀 탈출 조건문을 if(n == 0)으로 바꾸시면 될 듯 합니다.
답변 1