Recursion (재귀함수)

yoosg·2019년 12월 29일
0
post-custom-banner

Recursion

자기 자신을 재호출하는 함수를 말한다. 보통 트리 구조에 대한 알고리즘을 작성할 때 유용하며, 그 외에 여러 가지로 활용할 수 있다.

factorial

// 일반 조건/반복문 활용 예제

function factorial(num)
{
    // If the number is less than 0, reject it.
    if (num < 0) {
        return -1;
    }
    // If the number is 0, its factorial is 1.
    else if (num == 0) {
        return 1;
    }
    let tmp = num;
    while (num-- > 2) {
        tmp *= num;
    }
    return tmp;
}

let result = factorial(8);
document.write(result);

// Output: 40320
// Recursion 활용 예제

function factorial(num)
{
    // If the number is less than 0, reject it.
    if (num < 0) {
        return -1;
    }
    // If the number is 0, its factorial is 1.
    else if (num === 0) {
        return 1;
    }
    // Otherwise, call this recursive procedure again.
    return (num * factorial(num - 1));


let result = factorial(8);
document.write(result);

// Output: 40320

양쪽 모두 동작하는데 문제가 없고 결과값 또한 같기 때문에, 단순한 패턴으로 반복되는 연산 예제에서는 Recursion을 사용함으로써 얻을수 있는 이점이 돋보이지 않는다.

Multi-Dimensional Array(다차원 배열)

// 일반 조건/반복문 활용 예제

function multiDimensionalArray(target){
    
    let result = []

    // target의 길이 만큼 반복
    for(let i = 0; i < target.legnth; i++){
        // target의 i가 배열인지 확인
        if(!Array.isArray(target[i)){
            // array가 아니라면 result에 push
            result.push(target[i])
        }else{
            for(let j = 0; j < target[i].length; j ++){
                if( !Array.isArray(target[i][j])){
                    result.push(target[i][j])
                }
            }else{
                .
                .
                .
            }
        }
    }
}

일반적인 방법으로는 depth만큼 for문이 반복 될 것이고 target의 depth 정보가 없다면 해결하기 어렵다.

// Recursion 활용 예제

function multiDimensionalArray(target){
    
   letr result = [];
    
    for(let i = 0 ; i < target.length; i++){
        // Array가 아니라면 push
        if(!Array.isArray(target[i]))
            result.push(target[i])
        else{
            result = result.concat(array(target[i]))
        }
    }

    return result;
}

다차원 배열을 1차원 배열로 만드는 예제에서는 효율적으로 해결할 수 있다.

post-custom-banner

0개의 댓글