인프런 커뮤니티 질문&답변

조민선님의 프로필 이미지
조민선

작성한 질문수

홍정모의 따라하며 배우는 C언어

9.9 이진수 변환 예제

다음 코드가 무한루프 도는 이유

작성

·

667

0

#define _CRT_SECURE_NO_WARNINGS

 

#include <stdio.h>

 

void binary(int num);

 

int main()

{

    int n = 10;

    binary(n);

}

 

void binary(int num) {

    int remainder = num % 2;

    

    while(num > 1)

    {

        

    binary(num / 2);

        

    }

    printf("%d",remainder);

    

    return;

}

 
이진수 변환을 구현해봤는데 무한루프를 도는 이유를 모르겠어서 질문합니다.

답변 1

0

재귀 호출을 반복문 안에서 하고계세요..!

이건 제가 말로 설명드리기는 어려운 것 같고 ㅠㅠ 디버깅으로 한단계 한단계 짚어보면 왜 무한 루프인지 감이 오실 것입니다. 반복문 안에서 또 호출하고 새로운 함수의 반복문에서 새로운 함수 또 호출하고... 이런 과정이기 때문입니다. 

int main()

{

    int n = 10;

    binary(n);

}



void binary(int num) {
    if (num == 0) 
        return;

    binary(num / 2);

    int remainder = num % 2;
    printf("%d", remainder);
}

 

이렇게 하셔야할 것 같아요.

 

 

조민선님의 프로필 이미지
조민선

작성한 질문수

질문하기