[C언어] 재귀함수의 순서역전, 10진수를 2진수로 바꾸기

ET의 공부/C언어|2020. 12. 22. 08:28

10진수의 2진수 변환

10진수를 2진수로 변환하는 방법은 간단합니다. 2로 나눈 결과가 2보다 작을 때까지 나눠준다면 2진수의 값을 얻을 수 있습니다.

위의 그림과 같은 경우 29는 2진수로 11101입니다. 

1*2^4  + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0  =>  16 + 8 + 4 + 0 + 1 = 29

#include <stdio.h>

int main () {
    int num = 29;
    int binary;
    while(num > 0){
        binary = num %2;
        num /= 2;
        printf("%d",binary);
    }
    printf("\n");
    return 0;
}
//10111

 

단순히 2로 나눈 나머지를 출력할 경우 하위 비트부터 출력이 됩니다. 이럴 경우 따로 배열에 저장을 해놓고 반대로 출력하는 과정을 거쳐야 하는데 재귀 함수의 순서 역전을 이용하면 더 간단히 구현이 가능합니다.

 

재귀함수의 순서 역전

#include <stdio.h>

void dec2bin(int n); //함수 선언

int main () {
    int num = 29;
    dec2bin(num);
    printf("\n");
    return 0;
}

void dec2bin(int n){
    int r;
    r = n%2;
    if(n>=2){dec2bin(n/2);}
    printf("%d",r);
    return;
}

//11101

 

2진법 계산은 처음 계산한 결과가 마지막에 출력되어야 합니다.(마지막 계산 결과가 처음에 출력) 재귀 함수를 이용하면 쉽게 구현할 수 있습니다.

if(n>=2) 까지 재귀 함수가 호출이 되고 조건을 만족시키지 못할 경우 printf("%d",r) 로 계산된 결과들이 마지막으로 호출된 함수의 값부터 처음 계산된 값 순으로 역순으로 출력이 됩니다. 이러한 재귀 함수는 메모리를 빠르게 소모한다는 단점이 있지만 일부 알고리즘을 해결하는데 간단한 방법을 제공한다는 장점이 있습니다.

댓글()