강의

멘토링

로드맵

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

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

작성한 질문수

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

9.9 이진수 변환 예제

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

작성

·

736

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);
}

 

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

 

 

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

작성한 질문수

질문하기