인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kimtaegyun99님의 프로필 이미지
kimtaegyun99

작성한 질문수

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

9.8 팩토리얼 예제

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

작성

·

368

0

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

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

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

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

답변 1

1

안녕하세요!

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

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

문제 없습니다! 

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

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

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

kimtaegyun99님의 프로필 이미지
kimtaegyun99

작성한 질문수

질문하기