// 거꾸로 출력!
#include <stdio.h>
void print_decs(int n);
int main(void)
{
print_decs(5);
return 0;
}
void print_decs(int n)
{
if (n <= 0) return;
print_decs(n - 1);
printf("%d\n", n);
}
// return;로 쳐내려 했지만 void함수여서 안되는 줄 알았는데 아님.
// void 함수에서의 return은 "여기서 일을 끝내고 즉시 나가라"는 뜻.
// 일반적 상황: 함수는 즉시 종료되고 자기를 불렀던 메인 함수의 다음 줄로 이동한다!
// 재귀함수 상황: 이전 층으로 돌아간다! 0에서 리턴 -> p(1)로 돌아감!!!
// 결론: 나를 호출한 코드 줄의 바로 다음 줄로!
// 영화관에서 퇴장 할 때 건물 밖으로 아예 나가는 게 아니라 영화관 로비(함수를 부른 곳)
//로 나오는 거랑 같음. 로비로 나와야 다음 영화를 보든(p(1)로) 집에가든(main함수로) 할 수 있음.
// if (n <= 0) return; 이 코드가 베스트!
// 똑바로 출력!
/*void print_decs(int n)
{
if (n <= 0) return;
print_decs(n - 1);
printf("%d\n", n);
}*/
// 함수 정의에서 return은 메인함수로 돌아가라는 게 아니라 '직전에 호출한 함수'
// 로 돌아 가라는 뜻이다!! 그래서 5넣으면 43210까지 갔다가 조건 빔 맞고
// 직전에 호출한 함수인p(1)로 돌아가서 실행함
/*근데 n이 0일 때 조건빔을 맞고 1일 때로 돌아갔다가 또 재귀함수 부분에 걸려서
n이 0일 때로 바뀌고 이렇게 무한반복 되는 거 아닌가? 라고 생각할 수 있지만
컴퓨터는 함수를 실행할 때 이미 실행완료된 줄로 다시 돌아가지 않는다.
컴퓨터는 **"아까 p(n-1)줄까지 읽고 옆방 갔었지? 이제 (printf)줄 읽을
차례야"**라고 기억합니다.*/
To embed this project on your website, copy the following code and paste it into your website's HTML: