아하
생활

생활꿀팁

검은물수리128
검은물수리128

c언어 2진수 순환 프로그래밍에서 이렇게 코드를 짜면 왜 역순으로 출력이 되나요?

// 2진수 형식으로 출력

#include <stdio.h>

void print_binary(int x);

int main(void)

{

print_binary(9);

}

void print_binary(int x)

{

if( x > 0 )

{

print_binary(x / 2); // 재귀 호출

printf("%d", x % 2); // 나머지를 출력

}

}

이런식으로 print_binary(x/2) 다음에 printf를 적으면 역순으로 출력이 되고 printf 다음에 print_binary(x/2)을 쓰면 정순으로 출력이 된다는데 왜 그런지 이해가 안가요... x는 인수가 유지되는게 아닌가요? 궁금합니다

    55글자 더 채워주세요.
    1개의 답변이 있어요!
    • Tov
      Tov

      안녕하세요.

      print-binary()를 Pb()로 축약해 답변드리겠습니다.

      재귀호출 질문주셨는데요.

      printf가 뒤에있을 경우

      pb(9)

      = pb(4) printf(9)

      =( pb(2) printf(4)) print(9)

      = (( pb (1) printf(2) )print(4)) print(9)

      pb부터 계산하여 2 4 9순이며

      반대로 printf가 앞에 있을 경우

      pb(9)

      = printf(9) pb(4)

      = printf (9) ( printf(4) pb(2))

      = printf (9) (printf(4) (printf(2) pb(1)))

      로써 printf가 먼자 출력되므로 9 4 2 의 순서가 됩니다.