본문 바로가기

Javascript

JavaScript 자바스크립트 재귀함수

반응형

JavaScript 재귀함수 

 

Recursive function 

* recursive

미국[rɪ│kɜːrsɪv]발음듣기

영국식[rɪ│kɜːsɪv]발음듣기

형용사

  • 반복[되풀이]되는

* cursive

미국[│kɜːrsɪv]발음듣기

영국식[│kɜːsɪv]발음듣기

형용사

  • 필기체인

 

JavaScript 재귀함수란?

함수가 자신을 다시 호출하는 구조로 만들어진 함수 

재귀함수의 특징 :

1. 종료 조건이 있어야 하며 종료조건을 설정하지 않으면 무한 반복이 된다. 

2. 재귀함수로 작성되는 코드는 반복문으로도 가능하다. 

 

 

 

예제 1. 1부터 100까지의 총합 구하기 

 

- 재귀함수가 아닌 반복문

let sum = 0; 
for(let i=1; i<=100; i++){
    sum += i;
}

console.log(sum)

- 재귀함수로 풀은 코드 

let idx = 0; 
function sum(a){
    idx += a;
    console.log(idx, a);
    if(a==100) return idx;
    a++;
    return sum(a);
}

console.log(sum(1));

 

- 수학 공식으로 풀은 함수

만약 호제법 등등 이런 수학공식이 있으면 알고리즘 풀기 전 반드시 공부하는게 좋다 

ex ) 아래 코드 

function sum(a,b){
    return sum = b*(b+1)/2;
}

console.log(sum(1,100));

 

 

 

재귀함수 사용할 때는 return 을 잊지 않기 !! 

예제2

function test(num){
    if(num == 10){
        return -1;
    }
    num++;
    test(num)      // 재귀함수를 쓸 때 return 이 없으면 나온 값이 돌아는 가지만 
}                   // 결국 return 되지는 않는다. 
 
console.log(test(1));    //undefined


function test1(num){
    if(num == 10){
        return -1;
    }
    num++;
    return test1(num)       //return 을 적어줘야함 
}

console.log(test1(1));     // -1

 

 

 

 

 

 

 

 

 

예제 3

프로그래머스 javascript 코딩테스트 콜라츠추측 문제 

var answer = 0 ;
function solution(num){
    if(answer>500){
        return -1
    }else if(num==1){
        return answer;
    } else if(num%2==0){
        num = num/2;
        answer++;
        return solution(num);      // 여기에 return 이없으면 위에 최종return 값이 안나온다. 
    }else{
        num = num* 3+1;
        answer++;
        return solution(num);       //여기도요 
    }
}

console.log(solution(10))

 

반응형