inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

9.8 팩토리얼 예제

함수와 재귀함수(1)이 가지는 반환값

해결된 질문

376

상인김

작성한 질문수 8

2

#include <stdio.h>

int start;

int loop(int n);

long recursive_factorial(int);

int main()

{

int b = recursive_factorial(5);

printf("your final destination is % d", b);

return 0;

}

long recursive_factorial(int n)

{

if (n != 0)

{

// recursion 함수 : it is called "재귀호출" and tail recurision in english

printf("%d\n", n);

return n * recursive_factorial(n - 1);

}

printf("hki"); // 이 줄 없을때는 그냥 120 출력된다. 그러나 이 줄 추가했더니 뭔가 다르다.

//출력스트링의 길이가 반환값인가? hi 일때 최종값 240, hki일때 최종값 360이네(120씩 증가한다.), 근데 한글은 길이 한 번 늘때마다 240씩 증가하네?

}

 

코드입니다.

팩토리얼 예제를 얼떨결에 직접 풀었지만, 궁금증이 가시지 않아 질문 올립니다.

첫 번째, recursive_factorial(2)는 2 * 동일한 함수의 (1)을 반환값으로 갖습니다. 이때 함수(1)의 반환값은 어찌 되나요?

두 번째, 주석으로 남겨둔 내용의 이유가 궁금합니다.

c

답변 1

1

Soobak

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

#include <stdio.h>

int start;

long recursive_factorial(int);

int main()
{
  int b = recursive_factorial(5);
  printf("your final destination is %d", b);

  return 0;
}

long recursive_factorial(int n)
{
  if (n != 0)
  {
    printf("%d\n", n);
    return n * recursive_factorial(n - 1);
  }
  printf("hki");
}

 

위 코드에서 recursive_factorial(2) 를 호출하면,
n0 이 아니므로, 2 * recursive_factorial(1) 을 계산합니다.

recursive_factorial(1)1 * recursive_factorial(0) 을 계산합니다.

여기서, 문제가 발생합니다.

코드에서 n0 일 때의 반환값을 정해주지 않으셨기 때문에, 함수는 0 일 때 쓰레기 값(메모리 주소에 이미 할당되어 있는 임의의 값)을 반환합니다. 따라서 예상치 못한 행동이 발생하게 됩니다. (출력이 정상적으로 이루어 졌다고 하더라도, 우연인 것입니다.)

따라서, 반환값을 명시해 주셔야 합니다.

 

마지막으로 첨부해주신 printf() 함수의 호출의 경우, recursive_factorial() 함수의 반환값에 영향을 미치지 않습니다.
혹시, 질문자분께서 코드를 첨부하시는 과정 중 return 과 같은 일부 키워드의 누락이 있지는 않으셨는지 확인해주시면 감사하겠습니다.

0

상인김

printf()안의 글자수에 따라 결과값이 달라지는 것은 몇 번이고 확인한 사실이라 반환값인 줄 알았는데, 아니었나 보네요.. 알겠습니다.

Export template 안됨

1

18

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

54

3

main 함수에서 왜 int만 선언이 되는걸까요

1

56

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

54

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

79

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

113

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

69

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2