Dog foot print

[javascript] 재귀함수란 본문

Javascript

[javascript] 재귀함수란

개 발자국 2019. 7. 11. 21:44

재귀 함수란 영어로 reclusive function 이라고도 불리운다. 이 재귀함수는 함수를 정의할때 함수내부에서 자신을 호출하는 함수, 알고리즘입니다. 

 

재귀 함수의 사용 

function reclusive(numb){
    if(numb == 0){
        console.log("end");
    }else{
        console.log(numb);
        reclusive(numb-1);
    }
}

reclusive(10);

 

파라메터로 들어온 인자를 0이 될때 까지 1씩 감소시켜 출력하는 함수를 만들었다. 재귀 함수는 함수내부에서 자신을 호출하기 때문에 별다른 제어장치가 없다면 무한 루프에 빠지기 쉽다. 그러므로 항상 제어문을 통해 재귀함수호출을 통제해야 한다. 

 

왜 재귀 함수를 사용하는가 ?

for 문이나 while문을 사용해서도 위와 같은 재귀함수를 만들 수 있는데 굳이 재귀 함수를 사용해야 하는 이유가 무엇일까 ? 

 

순환을 쓰는 이유는 알고리즘의 문맥이 간단해지기 때문일 것이다. 또한 이 포스팅을 위해 다른 블로그를 보고 공부하니 변수의 사용이 적어져서 라는 답변이 있었다. 순환문 대신 반복문을 사용하면 적어도 1개 이상의 변수를 설정해야 하는데 이 변수는 메모리의 영역을 잡아먹을 뿐 아니라 필요이상의 변수는 가독성에도 좋지 않다. 

 

재귀 함수는 정말 좋은 함수인가 ? 

재귀 함수는 사실 반복문에 비해 속도나 성능이 떨어진다. 그 이유는 함수안에서 함수를 호출하게 되면 이 함수는 호출 스택에 들어가게 된다. 이 함수가 호출 스택에 무수히 많이 쌓인다면 스택오버플로우라는 현상을 일으키고 프로그램은 중지된다.

 

간단한 예제 팩토리얼함수

팩토리얼 함수는 인자로 전달한 n의 값부터 1까지 전부 곱하여 리턴 하는 함수이다.

 

ex ) factorial(5) return 5 * 4 * 3 * 2 * 1 

 

function factorial(n){
    if(n==1){
        return 1; 
    }
    return n * factorial(n-1);
}

console.log(factorial(5));

 

 

 

 

 

 

반응형

'Javascript' 카테고리의 다른 글

[javascript] 원형큐 만들기  (0) 2019.07.12
[javascript] 스코프  (0) 2019.07.12
[javascript] 아주 간단한 class toggle 만들기  (0) 2019.07.09
[javascript] 선형 큐 만들기 queue  (1) 2019.07.08
[javascript] Stack 구현하기  (0) 2019.07.07
Comments