inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

함수 마무리

팩토리얼 함수 질문

해결된 질문

377

킴주니

작성한 질문수 24

0

처음 메인함수에서 factorial(5)를 실행하면

팩토리얼 함수로 들어가서

return을 n * factorial(n - 1)이잖아요 그러면

5 * factorial(4)니까 함수가 다시실행되서

5 * 4 * factorial(3)이런식으로 계속 호출 되는건가요?

그리고 리턴값이 왜 120이 나오는지 조금 헷갈립니다 처음

factorial(5)를하면 5 * factorial(4)일텐데 이값을 리턴해주는게 아니고 또다시 함수가 호출되는거같은데 혹시 리턴값이왜 120이 나오는지 설명해주실 수 있으실까요 ㅠ

 

c++

답변 2

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 킴주니님

질문하신 팩토리얼 함수의 작동 방식과 리턴 값이 왜 120이 되는지에 대한 궁금증을 해소해드리기 위해 관련된 자료를 참고하였습니다.

팩토리얼 함수는 재귀적으로 자기 자신을 호출하면서 값을 계산하는 함수입니다. 킴주니님이 말씀하신 대로, factorial(5)를 호출하면 이 함수는 5 * factorial(4)를 실행하게 되며, 이 과정은 factorial(1)이 호출 될 때까지 계속됩니다. factorial(1)의 경우 기본적으로 1을 반환하도록 설정되어 있으며, 이것이 재귀 호출의 끝이 됩니다. 그 후, 각 함수 호출 스택이 반환되면서 최종적으로 5 * 4 * 3 * 2 * 1 = 120의 결과가 도출됩니다.

재귀 함수에 대한 설명과 그 예로 팩토리얼 함수를 설명한 유사한 질문을 찾았습니다:

  • 팩토리얼 연습문제중에: 이 질문에서는 팩토리얼 함수가 어떻게 작동하는지, 그리고 재귀 함수 내에서 return 문이 어떻게 처리되는지에 대한 설명이 포함되어 있습니다.

해당 답변에는 재귀 함수의 호출 순서를 보여주는 이미지도 포함되어 있어 이해에 도움이 될 것입니다:
재귀 함수 호출 순서

재귀 함수에 대한 기본적인 이해를 바탕으로 볼 때, 각 단계에서의 함수 호출이 축적되어 리턴되는 과정을 통해 최종적으로 120이라는 결과값이 도출됩니다. 위 링크에서 제공하는 추가 설명과 예제를 참고하시면, 팩토리얼 함수가 어떻게 실행되면서 해당 결과값을 도출하는지 더 명확히 이해하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

Rookiss

return을 n * factorial(n - 1)이잖아요 그러면
5 * factorial(4)니까 함수가 다시실행되서
5 4 factorial(3)이런식으로 계속 호출 되는건가요?


네 맞습니다.
5 4 3 2 factorial(1) = 5 4 3 2 1 곱해서 120이 되는 것이죠

0

킴주니

감사합니다!!

소스코드와 관련하여 질문드립니다

0

70

1

map 컨테이너의 emplace 함수에 대해

0

112

2

시작이 안되네요...!

0

96

2

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

0

125

1

리틀 엔디안 장점 질문합니다.

0

131

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

188

1

지역변수가 스택? 레지스터

0

128

2

마지막 문제 질문드립니다.

0

164

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

133

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

110

1

해당 코드는 왜 오류가 날까요?

0

155

1

마지막 문제 질문 있습니다.

0

119

1

강의 마지막부분에 질문이 있습니다.

0

190

2

Field초기화

0

140

1

virtual과 override 차이

0

314

2

3:30 참조자 리턴

0

167

1

map 찾기

0

158

1

프로그램 질문드려요

0

260

1

캐스팅 질문

0

138

1