Written by
    
        Nostrss
    
    
      
on
  on
[JS]나를 부르는 함수 재귀함수
재귀함수(Recursive function)
- 
    자신을 호출하는 함수의 행위를 재귀함수라 한다. 재귀함수는 더 작은 하위 문제를 포함하는 문제를 해결하는 데 사용된다. 
- 
    재귀 함수는 기본 케이스(재귀 종료) 또는 재귀 케이스(재귀 재개)의 두 가지 입력을 수신할 수 있다. 
예시1 팩토리얼
아래는 팩토리얼을 재귀함수로 구하는 예시이다.
const factorial = (n) => {
  if (n === 0) return 1;
  else {
      console.log(`${n} * factorial(${n-1})`)
      return n * factorial(n - 1);
  }
};
위의 식을 콘솔에 찍어보면 아래와 같이 결과가 나오게 된다.
factorial(10)
10 * factorial(9)
9 * factorial(8)
8 * factorial(7)
7 * factorial(6)
6 * factorial(5)
5 * factorial(4)
4 * factorial(3)
3 * factorial(2)
2 * factorial(1)
1 * factorial(0)
3628800
n으로 10을 입력 받았을 때 재귀가 종료가 되는 시점은 n이 0이 되는 시점이고 0이 될때까지 계속 해서 자기 자신을 호출하는 것을 볼 수 있다.
조금 더 풀어 써보면 아해와 같이 스택에 쌓여 있다고 보면 이해가 빠를 듯하다.
stp=9   n=1  일때 : 1 * factorial(0)
stp=8   n=2  일때 : 2 * factorial(1)
stp=7   n=3  일때 : 3 * factorial(2)
stp=6   n=4  일때 : 4 * factorial(3)
stp=5   n=5  일때 : 5 * factorial(4)
stp=4   n=6  일때 : 6 * factorial(5)
stp=3   n=7  일때 : 7 * factorial(6)
stp=2   n=8  일때 : 8 * factorial(7)
stp=1   n=9  일때 : 9 * factorial(8)
stp=0   n=10 일때 : 10 * factorial(9)
stp가 작은 스택이 먼저 쌓인 스택이고 n이 0이 되는 순간에 제일 위에 있는 스택(stp=9)부터 꺼내어 연산을 실행한다.
예시2 피보나치 수열
피보나치 수열도 재귀함수로 간단하게 답을 구할 수 있다.
const fibonacci = (n) => (
  n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2));
console.log(fibonacci(10));
다만 개인적으로 재귀함수로 피보나치 수열을 구한 적이 있었는데, 피보나치수 50 정도만 구하려고 해도 상당한 시간이 소요되었던걸로 기억한다.
재귀함수가 속도면에서는 그렇게 효율적이지 않은 것 같다.