본문 바로가기

Javascript

22. 재귀함수

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

 

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

 

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


1. 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이 될때 이다. 


2. 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이 되는 순간으로 짝수 홀수를 판별한다. 


3. 팩토리얼 

 

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을 곱하고 팩토리얼은 끝난다.


4. 피보나치

 

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인 순간이 재귀의 반복을 멈추는 구간입니다. 


5. 배열 요소들의 합 구하기  

 

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


 

'Javascript' 카테고리의 다른 글

21. 함수메소드(apply, call, bind)  (0) 2020.10.01
21. 타이머 API  (0) 2020.10.01
20. 동기 호출 VS 비동기 호출  (0) 2020.10.01
19. spread연산자 vs arguments  (0) 2020.10.01
18. 배열 내장메소드 총정리  (0) 2020.10.01