작성
·
226
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)으로 바꾸시면 될 듯 합니다.