작성
·
247
·
수정됨
답변 4
0
0
안녕하세요.
재귀함수를 보실 때 참고할만한 이미지 하나 드립니다.
이건 피보나치 함수는 아니고요, nSum이라는 함수가 있다는 가정하에
int nSum(int n)
{
if (n == 0) {
return 0;
}
int res = n + nSum(n - 1);
return res;
}
요렇게 부를 때 이해하는 것입니다.
다시 피보나치 수열로 돌아와볼게요.
지금 우리는 fib(n-1) + fib(n-2) 이렇게가 필요합니다.
그리고 fib 자체 탈출조건은 n이 1보다 작거나 같아야합니다.
4만 들어왔다고 가정해볼게요
그럼 처음에 fib(3) + fib(2)가 됩니다.
여기서! 아직 리턴이 끝나지 않았기 때문에, 각 함수를 다시 쪼개서 그대로 남겨두시면 됩니다.
fib(3) + fib(2) ----> 아직 리턴 안 끝났음 ----> 다시 호출 fib(2) + fib(1) + fib(1) + fib(0) 이렇게 됩니다.
이번에는 fib(2)가 나왔죠? 그것도 쪼개봅시다. fib(1) + fib(0)이 됩니다.
이걸 하나하나 올라가면서 리턴해줍니다.
fib(1) + fib(0) + fib(1)은 fib(3)이 나를 불렀으니까 2를 돌려주고,
fib(1) + fib(0)은 fib(2)가 나를 불렀으니까 1를 돌려줍니다.
그래서 합하면 3이 됩니다.
이렇게 0부터 10까지 모든 숫자를 한 다음에 그 결과물을 출력하는 것입니다.
그래서
0 1 1 2 3 5 8.. 이렇게 출력되는 것이고요.
우리가 위에서 4를 넣었을 때 결과물이 3이었죠? 지금 수열의 4가 되는 부분은 0부터 시작했으니 5번째 숫자입니다.
그래서 3이 되는 것입니다.
이해에 도움이 되셨을까요?
0
0
안녕하세요, 인프런 AI 인턴입니다.
김수레미님의 질문에 대해, 재귀함수를 사용한 피보나치 수열의 계산 방법에 대해서 설명드리겠습니다. 피보나치 수열에서 각 항은 바로 앞의 두 항의 합으로 구성됩니다. 즉, 피보나치 수열에서 n번째 항 F(n)은 F(n-1)과 F(n-2)의 합으로 계산됩니다. 이를 재귀함수로 구현할 때는, 기저 조건(base case)을 제외하고, 대부분의 경우에서는 F(n-1)과 F(n-2)을 각각 재귀 호출합니다. 그리고 그 결과 값을 더해서 반환합니다.
즉, 당신의 질문에 대한 답변은 “예, 각각 값을 더해서 반환합니다.” 입니다. 이 해석에 맞는 구체적 예시는 다음과 같습니다:
int fibonacci(int n) {
if (n <= 1) {
return n; // 기저 조건: n이 0이나 1일 때 n을 반환
} else {
return fibonacci(n-1) + fibonacci(n-2); // n-1과 n-2 항의 피보나치 값을 구한 후 더하여 반환
}
}
여기서, else
구문 내에서 fibonacci(n-1)
과 fibonacci(n-2)
를 각각 호출하고, 그 두 호출 결과를 더한 값을 반환하는 것을 확인할 수 있습니다.
비슷한 주제로 관련 질문에 대한 답변이 제공된 사례가 있어 링크를 첨부하오니 참고로 활용하시기 바랍니다.
해당 질문에서는 피보나치 수열의 구현을 재귀적 방법으로 설명하며, 어떻게 이 방법이 작동하는지에 대한 자세한 설명이 있습니다. 이 섹션에서는 피보나치 수열을 구현하는 함수의 작동 원리에 대해 자세히 설명하고 있으니, 재귀함수에 대해 배우거나 이해도를 높이고 싶으신 분에게 유용할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.