Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

뭐라도 쓰겠지

25.03.04 / 재귀함수를 이용한 2진법 변환기 본문

프로그래밍/C

25.03.04 / 재귀함수를 이용한 2진법 변환기

김데피 2025. 3. 4. 18:52
#include <stdio.h>

void EasyBinary(int n) {
	if (n > 1) EasyBinary(n / 2);
	printf("%d", n % 2);
}

int main(void) {
	int num;
	printf("10진수 : ");
	scanf_s("%d", &num);

	printf("2진수 : ");
	EasyBinary(num);

	return 0;
}

 

-25.03.05 수정-

챗지피티한테 원리와 반복문으로 바꾸는 법을 물어봤다.

설명

EasyBinary(int n) 함수는 재귀 호출을 사용하여 정수 n을 이진수(Binary)로 변환하여 출력하는 함수야.

어떻게 동작하는지 살펴보자:

  1. 재귀 호출:
    • n이 1보다 크면 n / 2를 다시 EasyBinary() 함수에 전달하여 호출해.
    • 이 과정을 반복하면 결국 n이 1 이하가 될 때까지 계속 n / 2를 계산하며 호출하게 돼.
  2. 출력:
    • 가장 작은 n부터 출력하기 때문에 큰 자리 숫자가 나중에 출력돼서 정상적인 이진수 순서가 유지돼.
    • 예를 들어, n = 13이면 호출 과정이 이렇게 돼:
EasyBinary(13)
├─ EasyBinary(6)
│  ├─ EasyBinary(3)
│  │  ├─ EasyBinary(1)
│  │  │  └─ printf("1") // 1의 자리
│  │  └─ printf("1") // 3의 자리
│  └─ printf("0") // 6의 자리
└─ printf("1") // 13의 자리

반복문으로 바꾸기

재귀를 반복문으로 바꾸려면 스택(stack) 또는 배열을 이용해서 값을 저장한 후 거꾸로 출력하면 돼.

#include <stdio.h>

void EasyBinaryLoop(int n) {
    int binary[32]; // 최대 32비트까지 저장 가능 (int 범위 고려)
    int index = 0;  // 배열 인덱스

    // n이 0이면 바로 0 출력
    if (n == 0) {
        printf("0");
        return;
    }

    // 2진수 변환 과정
    while (n > 0) {
        binary[index++] = n % 2; // 2로 나눈 나머지 저장
        n /= 2; // n을 2로 나눠서 업데이트
    }

    // 저장된 값을 거꾸로 출력
    for (int i = index - 1; i >= 0; i--) {
        printf("%d", binary[i]);
    }
}

int main() {
    int num = 13;
    EasyBinaryLoop(num);
    return 0;
}