1. 재귀 함수?
- 재귀 함수는 자기 자신을 다시 리턴하는 재귀 함수를 가지는 자기 자신을 다시 리턴하는 재귀 함수를 가지는 자기 자신을 다시 리턴하는 재귀 함수를 가지는 자기 자신을 다시 리턴하는 재귀 함수를 가지는...
- 자기 자신을 다시 리턴하는 함수이다.
- 이게 무슨 의미인가?
- 반복문과 똑같이 작동한다.
- 반복문처럼 '조건'을 가지고 그 조건에 맞으면 함수를 끝내게 된다.
- 가독성이 다른 반복의 코드보다 좋다.
2. 예시
- 한동안 우리를 한참 괴롭히던 피보나치 함수의 재귀 함수 버전이다.
function fibonacci(num) {
if(num === 0) {
return 0;
} else if(num === 1) {
return 1; // 앞의 if와 else if로 탈출 조건을 만들어 주었다.
} else {
num = fibonacci(num - 2) + fibonacci(num - 1) // 우리가 원하는 답을 다시 num에 넣는다.
return num;
}
}
- 반복문 버전보다 훨씬 간단하다.
- 하지만 효율적이지는 않다. 계속해서 함수를 불러오기 때문에 스택에 무리가 간다.
3. 재귀 함수를 어떻게 쓸 수 있을까?
입력값과 출력 값을 확인한다.
- 어떤 입력을 받아서 출력을 하는지를 정확히 알아야 함수가 리턴하는 값이 다시 자신으로 들어와 작동할 수 있는지를 알아야 한다.
문제를 쪼개서 생각한다.
- 입력값을 기준으로 경우의 수를 생각해 본다.
- 원하는 답으로 가기 위해 한 단계씩 진행되는 과정을 생각해 본다.
탈출 지점 만들기
- 재귀 함수를 돌다가 원하는 답이 리턴되는, 즉, 가장 작은 단위로 해결된 결과를 리턴한다.
- 이를 base case라고 한다.
문제를 계속 쪼개어 준다.
- 더 작은 단위로 문제를 쪼개어 준다. 재귀함수를 탈출하지 못하고 돌 때마다 해결해야 할 문제가 계속 줄어드는 것이다.
- 이를 recursive case라고 한다.
대충은 알겠지만 계속 사용해 보아야 부족함 없이 쓸 수 있을 것 같다. 재귀 함수는 반복문으로 사용할 수 도 있는데 이것도 생각을 해 보아야 할 문제이다.
'Coding > Today I Learned' 카테고리의 다른 글
2021.07.24(Sat.) <Graph 형태의 자료구조> (0) | 2021.07.25 |
---|---|
2021.07.22(Thu.) <Stack & Queue> (0) | 2021.07.22 |
2021.07.20(Tue.) <재귀함수 탬플릿> (0) | 2021.07.20 |
2021.07.19(Mon.) <객체지향 언어인 Javascript의 class와 prototype> (0) | 2021.07.19 |
2021.07.16(Fri.) <노션 공략집> (0) | 2021.07.16 |