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

정철님의 프로필 이미지
정철

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

재귀함수 관련 질문드립니다.

해결된 질문

작성

·

33

0

시험 전날에 글 많이 올라와서 바쁘실텐데도 불구하고 답변 달아주셔서 감사합니다

 

1차라고해야할까요 7 + f(6) 이런건 이제 이해가 되는데 compute(n-1) + compute(n-3) 이런 식은 아직 이해를 잘 못했습니다ㅠ 추가 설명 주시면 감사하겠습니다.

 

트리형태가 2갈래로 나뉘더라고요. 아무래도 그림 등 그려야해서 설명이 어려우실 수 있으니 정리된 영상 있으시다면 부탁드리고, 없으시면 제가 따로 또 찾아보겠습니다.

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

이 정도가 헷갈리시면 다른 방식으로 생각해보시는 걸로 시작하시는 게 좋습니다.

재귀가 아니라 아예 다른 함수라고 생각해보죠.

 

compute가 아니라 아예 다른 함수인 예를 들어 sum입니다.

compute가 아니라 sum이면 sum에 해당하는 함수에 값을 던지고, 그 함수를 실행한 리턴값이 돌아오겠죠?

그것과 똑같습니다.

 

파이썬을 기준으로 하면 이렇습니다.

def recursive_func(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return recursive_func(n-1) + recursive_func(n-3)

지금 보면 맨 아래에는 자기 자신을 부르는 것입니다.

헷갈리시면 아예 자기 자신이라고 생각하지 마세요. 다른 함수라고 생각하면서 값을 넣어보시면 됩니다.

 

print(recursive_func(2))  # Output: 1

여기서 2를 넣었습니다.

 

처음에 2를 넣으니까 어떻게 하나요?

위에 다 제끼고 맨 아래 return으로 갑니다.

다른 함수라고 생각하면,

def sum(n): <-- 이런 함수에 저 내용과 똑같은 함수의 내용에 넣었다고 생각하세요.

 

그리고 그 리턴값을 돌려 받은 다음에 다시 리턴해주면 됩니다.

현재 입력값이 2

(sum은 위의 recursive_func와 동일한 코드 내용인 이름만 다른 함수라고 생각하세요.)

return sum(1) + sum(-1)

sum(1)은 1를 리턴합니다. sum(-1)는 0을 리턴하죠

 

다시 recursive로 돌아왔습니다.

return 1 + 0이 최종값이 되었네요.

 

그러면 print(recursive_func(2))의 최종 출력값은 1이 됩니다.

 

재귀함수는 다른 영상에서도 몇 번 더 다뤘습니다.

나머지 영상 끝까지 다 시청하시면 도움이 되실 겁니다.

 

이해에 도움이 되셨을까요?

0

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

재귀 함수의 구조와 동작 원리에 대해 고민하고 계시는군요. 재귀 함수는 문제가 스스로를 여러 하위 문제로 나누어 해결하는 기법으로, 함수가 자기 자신을 계속 호출한다는 특징이 있습니다. 특히 compute(n-1) + compute(n-3)와 같은 형태는 각각 두 가지 경로로 나뉘어가는, 일종의 “트리” 형태의 연산을 의미합니다.

재귀 함수의 트리 형태 설명

  1. compute(n-1)compute(n-3)의 의미:

    • 여기서 compute(n)이 특정 숫자의 값을 계산하는 함수라고 가정하면, 함수는 n이라는 값을 두 가지 다른 값으로 나눕니다.
    • compute(n-1): n에서 1을 감소시킨 값을 기반으로 함수가 다시 호출됩니다.
    • compute(n-3): n에서 3을 감소시킨 값을 기반으로 함수가 다시 호출됩니다.
  2. 트리 구조:

    • 이 접근 방식은 일종의 “트리” 형태를 형성하며, 각 노드는 호출된 함수의 인수를 나타냅니다.
    • 예를 들어, compute(7)을 호출하면, 이는 compute(6)compute(4)를 호출하게 되며, 이 과정이 계속되면서 각 노드에서 두 가지 경로가 계속 파생됩니다.

아래 링크에서 유사한 질문들에 대한 답변을 보시면 더 많은 도움이 될 수 있습니다:

이해를 돕기 위한 설명이나 관련된 영상은 현재 제공되지 않지만, 위 설명이 도움이 되길 바라며 추가적으로 질문이 있으시면 언제든지 문의해 주세요.

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

정철님의 프로필 이미지
정철

작성한 질문수

질문하기