inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

9.8 팩토리얼 예제

재귀함수를 직관적으로 생각해도 되나요?

409

kimtaegyun99

작성한 질문수 6

0

함수스코프안에 함수스코프,  그안에 함수 스코프,,,를 호출하고, 제일 마지막으로 호출된 젤 작은 것부터 반환 그다음것 반환,,, 이런식으로 진행되면 직관적으로 보고 생각하기엔 조금 힘들것같다 느껴집니다.

그런데 팩토리얼 예제 (8분에 있는 코드)를 보니까 생각보다 직관적으로 보입니다.  그냥 0보다 클때까지 감소시켜가며 곱해라 이런식으로 말입니다.

그래서 궁금한게, 직관적으로 보게 되면 문제가 생길수 있나요? 아니면 그냥 직관적으로 사용해도 되나요?

추가)생각이 하나 더 들었습니다. 어차피 n은 이름만 같은 모두 다른 변수이니 그냥 직관적으로 사용해도 별 문제 없을 것 같은데, 이런 생각이 맞나요?

c

답변 1

1

안소

안녕하세요!

직관적으로 사용해도 되냐는게 구체적으로 어떤 말씀인지 이해가 잘 안가네요 ㅠㅠ 

저런식으로 직관적인 생각대로 재귀를 이용해 짜도 되냐는 말씀일까요..?

문제 없습니다! 

n! 는 곧 n * (n-1)! 와 같으니까 이 점화식을 일반화하여 재귀적인 함수 호출로 구현한게 바로 저 코드입니다. (n-1)! 은 또 n - 1 * (n-2)! 와 같기 때문에 또 똑같은 함수를 호출하여 (n-1)!을 구하러 들어갈테니 재귀적인 부분이 되죠. 

(이건 그냥 여담이긴한데 위의 예시같이 팩토리얼을 재귀로 구하는건 나쁘지 않지만 예를 들어 피보나치 수열같은 경우에는 a5 = a4 + a3 와도 같고 또 a4 = a3 + a2 와 같기 때문에 이 부분만 해도 벌써 a3을 두번이나 연산해야할 필요성이 생겼지요. 그래서 이런 경우처럼 중복되는 연산이 많을 때는 재귀로 구현하면 굉장히 비효율적이긴 합니다.)

그리고 새롭게 재귀적으로 새로운 함수가 계속 호출될 수록 그 함수들의 매개변수들은 전부 다른 별개의 변수가 되는게 맞습니다. 직관적으로 사용한다는 말씀이 잘 와닿지가 않지만 앞 문장에 대해서만 답변을 드려봅니다. 

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

1

48

3

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

1

53

2

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

1

53

2

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

1

46

1

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

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

135

2

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

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

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

1

112

2

소스파일안에 여러 파일

1

74

2

F5와 F7의 차이

1

75

2

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

1

58

2

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

1

68

1

Step over 기능 문의

1

52

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

64

2

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

1

53

2

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

1

53

2

11.5 코드 구현

1

67

2