재귀는 함수가 함수 본인을 호출하여 다시 사용하는 것을 말한다. 팩토리얼 함수를 예로 들어보자.
function factorial(num) { if(num === 1) return num; return num * factorial(num - 1); }
num = 5
일때5!
의 값은5 * 4 * 3 * 2 * 1
이다.
이는5 * 4!
으로 쪼갤 수 있다.
이는5 * (4 * 3!)
으로 쪼갤 수 있다.
재귀함수는 이렇게 문제를 작게 쪼개어 풀 때 사용한다.
주어진 문제를 비슷한 작은 문제로 쪼개어 풀 수 있는 경우, 또 중첩된 반복문이 많은 경우에 사용한다. 다음은 재귀적 사고를 하는 방법, 즉 재귀함수를 만드는 방법이다.
- 재귀함수의 입력값과 출력값 정하기.
- 문제를 쪼개고 경우의 수 나누기.
- 단순한 문제 해결하기.(base case)
- 복잡한 문제 해결하기.(recursive case)
- 코드 구현하기.
아래는 재귀함수의 기본 타블렛이다.
function recursive(input1, input2, ...) { if(문제를 더 쪼갤 수 없는 경우) { // base case (재귀 탈출 조건) return 단순한 문제의 해답; } return 더 작은 문제로 새롭게 정의된 문제; // recursive case }
base case는 재귀의 기초, 즉 재귀의 탈출 조건이다. recursive case는 복잡한 문제를 풀기 위해 작은 문제로 쪼개어 재귀함수를 호출하는 것이다. 아래는 재귀함수를 이요한 피보나치 수열이다.
function fibonacci(num) { if(num === 0 || num === 1) return num return fibonacci(num - 1) + fibonacci(num - 2) }