재귀함수 쉽게 말하면 함수 내부에서 자기 자신의 함수를 반복해서 사용하는 것이다. 반복이 끝나는 브레이크가 있어야 한다.
몇몇개의 수학공식 관련 재귀 함수는 외워 두는게 좋은거 같다.... >_<;;
📌 num을 입력받아 1부터 num까지 함 구하기
function sum(num){ if (num <= 1){ // num이 1일때 재귀반복이 종료 된다. return num; } return num + sum(num -1); //먼저 num을 더하고 -1일씩 하며 1이 될까지 수를 num에 더해준다. }
수를 받아 1부터 받은 수 까지의 합을 구하는 함수 이다.
여기서 브레이크는 num이 1이 될때 이다.
📌 num을 입력받아 홀수인지 짝수인지 판별
function isOdd(num){ // numd으로 음수는 안들어온다는 과정하에 if(num === 0){ //num이 0이면 짝수 reutn false; }else if(num === 1){ // num이 1이면 홀수 reutnr true; } return isOdd(num -2); // 짝수 찾기 할때 2로 나누어 준것처럼 2를 빼주는것을 반복하여 홀수찾기 }
여기서는 num이 0이나 1이 되는 순간이 브레이크 라고 생각하면 된다. !
-2를 계속 해서 하여 나머지가 0이나 1이 되는 순간으로 짝수 홀수를 판별한다.
📌 팩토리얼
function fac(num){ if(num <= 1){ // num이 1이 될때 재귀반복 종료 reuturn 1; } return num * fac(num-1); // num부터 -1 씩 해주며 곱 하기 }
팩토리얼은 만약 5를 입력 받았다면 5 X 4 X 3 X 2 X 1 하는 공식이다. num으로 부터 -1씩해준 수를 곱하고 있다.
또는 5 X 4! 한 것과 같다. 4!은 4X3!과 같다. 이것이 반복 되면 5 X 4 X 3 X 2 X 1 이것이다.
-1하다가 1이 되는순간 1을 곱하고 팩토리얼은 끝난다.
📌 피보나치
function fibonacci(num) { if (num <= 1) { // num이 1 일때 재귀반복 종료 return num; } return fibonacci(num - 1) + fibonacci(num - 2); }
피보나치는 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...처럼 전수와 전전수의 합을 다음수로 하는 방식이다.
0번째 수는 0 / 1번째 수는 1 / 2번째 수는 1 / 3번째 수는 2 / 4번째 수는 3/ ....
5번째 수는 전수 3과 전전수 2를 더한값인 5입니다.
이것이 반복이 되면 규칙을 찾을수 있습니다. 현재 번째 수는 전수와 전전수의 합입니다. num-1 + num-2 인 샘입니다.
7을 입력 받았다면 7번째 까지의 피보나치를 구하는것이기에 7부터 -1씩 해주며 1번째 까지 내려가며 값들을 더해줍니다.
여기서 브레이크는 1번째가 되는 넘이 1인 순간이 재귀의 반복을 멈추는 구간입니다.
📌 배열 요소들의 합 구하기
function arrSum(arr){ if(arr.length === 0){ return 0; } const head = arr[0]; const tail = arr.slice(1); return head + arrSum(tail); }
일단 먼저 알아야 하는 점은 slice(1)을 주면 1자리 포함 뒤에 모든 요소를 뜻한다. 그러니깐 0번째 자리빼고 모든 요소를 말하는거입니다.
쉽게 말하면 배열의 요소들이 없을때까지 0번째자리만 계속 해서 더해 나가는 원리 입니다.
먼저 [1,2,3,4]라는 배열이 들어 왔다면 0번째 자리는 1이고 slice(1) 값은 [234]입니다.
head에 1을 주입하고 tail인 [2,3,4]는 다시 arrSum 함수 안으로 들어간다. 이번에 0번째 자리는 2입니다.
2는 head로 더해진다. 그리고 tail은 [3,4]가되었습니다.
이런식으로 반복을 하여 []이 되었을때 리턴 0을 하고 재귀에 반복은 끝이 납니다. 그래서 head에는 1+2+3+4를 하게되어 10을 출력한다.