Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 재귀 함수로 10진수를 2진수 문자열로 변환하기


이번 글에서는 숫자 하나를 인수로 받아, 재귀(recursion)를 활용해 해당 숫자의 2진수 표현을 문자열로 반환하는 JavaScript 함수를 작성해 보겠습니다.

예시 −

f(4) = '100'
f(1000) = '1111101000'
f(8) = '1000'

재귀 변환의 동작 원리

10진수를 2진수로 바꾸는 핵심 아이디어는 간단합니다. 주어진 수를 2로 나눈 나머지가 현재 자리의 비트가 되고, 몫에 대해 같은 과정을 반복하면 됩니다. 이 과정을 수가 1보다 작아질 때까지 재귀적으로 수행한 뒤, 호출이 거꾸로 풀리면서 각 단계에서 구한 비트가 뒤에 하나씩 붙어 최종적인 2진수 문자열이 완성됩니다.

예제 코드

다음은 전체 구현 코드입니다 −

const decimalToBinary = (num) => {
    if(num >= 1) {
        // num이 2로 나누어 떨어지지 않으면
        // (num - 1) / 2에 대한 재귀 결과 뒤에 1을 붙여 반환
        if (num % 2) {
            return decimalToBinary((num - 1) / 2) + 1;
        } else {
            // num / 2에 대한 재귀 결과 뒤에 0을 붙여 반환
            return decimalToBinary(num / 2) + 0;
        }
    } else {
        // 종료 조건(베이스 케이스)
        return '';
    };
};
console.log(decimalToBinary(4));
console.log(decimalToBinary(1000));
console.log(decimalToBinary(8));

실행 결과

콘솔 출력 결과는 다음과 같습니다 −

100
1111101000
1000

코드 상세 설명

함수는 가장 먼저 종료 조건을 검사합니다. num이 1 미만이면 빈 문자열을 반환해 재귀 호출을 멈춥니다. 그렇지 않은 경우 num을 2로 나눈 나머지를 확인하는데, 나머지가 1이면 홀수이므로 (num - 1) / 2를 인수로 재귀 호출한 결과 뒤에 '1'을 붙이고, 나머지가 0이면 짝수이므로 num / 2를 인수로 재귀 호출한 결과 뒤에 '0'을 붙입니다.

이렇게 가장 깊은 호출부터 차례대로 비트가 연결되면서 최종 2진수 문자열이 만들어집니다. 예를 들어 f(4)의 경우 4 → 2 → 1 순서로 호출이 진행되고, 각 단계에서 0, 0, 1이 순서대로 붙어 '100'이라는 결과가 반환됩니다.