재귀함수

0

javascript

목록 보기
16/34
post-thumbnail

재귀함수 쉽게 말하면 함수 내부에서 자기 자신의 함수를 반복해서 사용하는 것이다. 반복이 끝나는 브레이크가 있어야 한다.

문제와 함께 재귀 함수를 알아보자 !

몇몇개의 수학공식 관련 재귀 함수는 외워 두는게 좋은거 같다.... >_<;;

📌 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을 출력한다.

profile
👩🏻‍💻항상발전하자 🔥

0개의 댓글