재귀(Recursion)를 사용하면 반복문 없이도 10진수를 손쉽게 2진수로 변환할 수 있습니다. 이번 글에서는 C#에서 재귀 호출을 활용해 10진수를 2진수로 바꾸는 방법을 단계별로 살펴보겠습니다.
1. 변환할 10진수 준비하기
먼저 2진수로 변환할 10진수 값을 선언합니다.
int dec = 30;
이 값은 프로그램 실행 중 변경되지 않으며, 이후 재귀 함수에 전달됩니다.
2. 재귀 함수 정의하기
다음으로 10진수 값을 매개변수로 받는 재귀 함수를 작성합니다.
public int displayBinary(int dec) {
}
3. 재귀 로직 구현하기
핵심 아이디어는 다음과 같습니다. 10진수가 0이 될 때까지 조건을 검사하면서, 현재 값을 2로 나눈 나머지(mod 2)를 구하고, 동시에 dec / 2 값을 인자로 하여 자기 자신을 다시 호출하는 것입니다.
이렇게 하면 가장 깊은 재귀 호출부터 차례대로 반환되면서 나머지들이 역순으로 출력되어, 최종적으로 올바른 2진수 순서가 완성됩니다.
public int displayBinary(int dec) {
int res;
if (dec != 0) {
res = (dec % 2) + 10 * displayBinary(dec / 2);
Console.Write(res);
return 0;
} else {
return 0;
}
}
(dec % 2)는 현재 자리의 이진 비트를 계산하고, 10 * displayBinary(dec / 2)는 재귀 호출 결과를 한 자리씩 왼쪽으로 밀어 자릿수를 맞춰주는 역할을 합니다.
전체 코드 예제
아래는 위의 로직을 모두 포함한 완성된 코드입니다.
using System;
public class Program {
public static void Main(string[] args) {
int dec;
Demo d = new Demo();
dec = 30;
Console.Write("Decimal = "+dec);
Console.Write("\nBinary of {0} = ", dec);
d.displayBinary (dec);
Console.ReadLine();
Console.Write("\n");
}
}
public class Demo {
public int displayBinary(int dec){
int res;
if (dec != 0) {
res = (dec % 2) + 10 * displayBinary(dec / 2);
Console.Write(res);
return 0;
} else {
return 0;
}
}
}
실행 결과
Decimal = 30 Binary of 30 = 11110
정리
재귀를 활용한 진법 변환은 나눗셈과 나머지 연산이라는 수학적 원리를 그대로 코드로 옮긴 것입니다. 값이 0일 때 재귀를 종료하는 기저 조건(base case)이 반드시 필요하며, 이를 통해 스택 오버플로우 없이 안전하게 변환이 완료됩니다. 반복문보다 코드가 간결해지는 장점이 있지만, 매우 큰 숫자를 다룰 때는 호출 스택 깊이를 고려하는 것이 좋습니다.