인프런 커뮤니티 질문&답변
재귀 함수 단점에 대한 궁금증입니다.
작성
·
45
·
수정됨
1
재귀 함수 단점이 결과 값을 구하기 위해
앞선 값들을 새롭게 계산해야 해서 중복 계산해야 하고,
그로 인해 중복된 계산이 많아질 수록 메모리를 매번 많이 잡아먹게 되는 것이 문제라고 설명해주셨는데요.
피보나치 수열을 예로 들었을 때,
최초 한 번 임의의 범위까지 피보나치 수열의 값들을 계산해서 배열에 저장해 놓고, 그 뒤에 원하는 값을 index로 빼서 쓰는 씩으로 메모리 관리와 연산 수를 줄이는 방식으로 하게 될까요?
이런 경우는 어떤 씩으로 프로그램을 개선해 나가는지 궁금합니다 🙏
답변 1
1
안녕하세요? 질문&답변 도우미 durams입니다.
말씀해주신 내용이 맞습니다. 이번 강의 영상에서도 언급되었듯이, 별도의 배열을 사용하여 계산했던 값들을 담아두고 나중에 중복 계산하는 대신 이를 뽑아쓰는 방식을 사용할 수 있습니다. 이러한 접근 방식을 Dynamic Programming이라고 하는데요(사실 정확히는 dynamic programming 문제를 푸는 방법 중 하나입니다), 언어 문법보다는 알고리듬 과목에서 더 자세하게 배우시게 될 내용입니다.
다만 이것이 재귀와 양립 불가능한 개념은 아니에요. 재귀를 하면서 중복 계산을 방지할 수도 있고, 반복으로 알고리듬을 짜고 중복 계산을 방지할 수도 있어요. 전자는 보통 memoization 또는 top-down approach, 후자는 tabulation 또는 bottom-up approach라고 합니다. 알고리듬에 관한 내용은 강의 내용을 벗어나기에 키워드 정도만 제시해드릴 수 있다는 점 양해 부탁드립니다.
또한 재귀가 언제나 나쁜 것은 아닌게, 문제에 따라 재귀로 접근하는 것이 훨씬 이해하기 쉽고 작성이 우아하게 되는 경우도 있어요. 물론 이번 강의 영상에서 언급된 것처럼 재귀 자체에는 제한이 존재하기 때문에 사용 시 염두에 둬야겠죠.






답변 감사합니다!
아직 경험이 많이 없어 막연하지만, 후에 이에 대해 좀 더 깊이 생각해 볼 수 있는 시간이 있다니 기대되네요.