[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) 로 계산된 결과들이 마지막으로 호출된 함수의 값부터 처음 계산된 값 순으로 역순으로 출력이 됩니다. 이러한 재귀 함수는 메모리를 빠르게 소모한다는 단점이 있지만 일부 알고리즘을 해결하는데 간단한 방법을 제공한다는 장점이 있습니다.
'ET의 공부 > C언어' 카테고리의 다른 글
[C언어] 배열 그리고 배열 초기화 (0) | 2020.12.29 |
---|---|
[C언어] 포인터 알아보기 (0) | 2020.12.22 |
[C언어] 재귀함수란? (0) | 2020.12.21 |
[C언어] return 을 사용하여 함수에서 값 리턴하기 (0) | 2020.12.21 |
[C언어] 함수의 전달인자 (0) | 2020.12.20 |
댓글()