자바 2진수출력 재귀메소드인데 이해가 되지 않습니다.
조회수 1125회
public static void bin(int num) {
if(num>0) {
int bin;
bin = num % 2;
num/=2;
bin(num);
System.out.print(bin);
}
}
public static void main(String[] args) {
bin(10);
}
이게 코드인데 bin 메소드에서 출력전에 다시 bin 메소드를 출력하면, 2진수 결과값이 저장되는 bin이 다시 계산한 새로운 값으로 초기화 되는 거 아닌가요?? 왜 재귀 호출 후 출력하는지 이해가 되지 않습니다. 출력을 먼저 한 후 재귀 호출을하면 결과값이 다르더라구요..
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
3 답변
-
재귀호출에 대해 다시 이해하면 좋을 것 같네요.
-
재귀함수는 말이죠 자신을 호출할때마다 새로운 스택공간을 창조하고 거기에 함수의 지역변수를 만들어 사용하므로 자신을 호출한 전단계의 지역변수값과 아무런 연관도 없답니다. 그래서 전단계의 계산결과가 초기화되는 일은 없을거예요. 그리고 재귀호출후 출력하는것은 2진수를 구하는 공식 그대로죠.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
위 자바코드와 동일한 의사코드입니다. 어느라인이 어디에 대응되는지 스스로 생각해 보세요.
이진수로출력(출력할수): // 출력할수가 101001 이었다면 마지막자리수 = 마지막자리수구하기(출력할수) // 마지막자리수는 1 마지막자리수뺀수 = 마지막자리수떼기(출력할수) // 마지막자리수뺀수는 10100 이진수로출력(마지막자리수뺀수) // 여기선 윗다섯자리 10100 출력됨. 마지막자리수이어서출력(마지막자리수) // 마지막자리수 불여서 1 출력됨. // 결국 101001 이 출력됨.
댓글 입력