개발공부/알고리즘

재귀

개발집사 2022. 10. 13. 18:43

POWER 솔루션

function power(base, exponent){
    if(exponent === 0) return 1;
    return base * power(base,exponent-1);
}
 

FACTORIAL 솔루션

function factorial(x){
    if (x < 0 ) return 0;
    if (x <= 1 ) return 1;
    return x * factorial(x-1);
}

PRODUCT OF ARRAY 솔루션

function productOfArray(arr) {
    if(arr.length === 0) {
    	return 1;	
    }
    return arr[0] * productOfArray(arr.slice(1));
}

RECURSIVE RANGE 함수 솔루션

function recursiveRange(x){
    if (x === 0 ) return 0;
    return x + recursiveRange(x-1);
}

피보나치(FIBONACCI) 솔루션

function fib(n){
    if (n <= 2) return 1;
    return fib(n-1) + fib(n-2);
}

Reverse 솔루션

function reverse(str){
    if(str.length <= 1) return str;
    return reverse(str.slice(1)) + str[0];
}

isPalindrome 솔루션

function isPalindrome(str){
    if(str.length === 1) return true;
    if(str.length === 2) return str[0] === str[1];
    if(str[0] === str.slice(-1)) return isPalindrome(str.slice(1,-1))
    return false;
}

someRecursive 솔루션

function someRecursive(array, callback) {
    if (array.length === 0) return false;
    if (callback(array[0])) return true;
    return someRecursive(array.slice(1),callback);
}

flatten 솔루션

function flatten(oldArr){
    var newArr = []
    for(var i = 0; i < oldArr.length; i++){
        if(Array.isArray(oldArr[i])){
        	newArr = newArr.concat(flatten(oldArr[i]))
        } else {
        	newArr.push(oldArr[i])
        }
    }
    return newArr;
}

capitalizeWords 솔루션

function capitalizeWords (array) {
    if (array.length === 1) {
    	return [array[0].toUpperCase()];
    }
    let res = capitalizeWords(array.slice(0, -1));
    res.push(array.slice(array.length-1)[0].toUpperCase());
    return res;
}

nestedEvenSum 솔루션

function nestedEvenSum (obj, sum=0) {
    for (var key in obj) {
        if (typeof obj[key] === 'object'){
        	sum += nestedEvenSum(obj[key]);
        } else if (typeof obj[key] === 'number' && obj[key] % 2 === 0){
        	sum += obj[key];
        }
    }
    return sum;
}

capitalizeFire 솔루션

function capitalizeFirst (array) {
    if (array.length === 1) {
    	return [array[0][0].toUpperCase() + array[0].substr(1)];
    }
    const res = capitalizeFirst(array.slice(0, -1));
    const string = array.slice(array.length - 1)[0][0].toUpperCase() + array.slice(array.length-1)[0].substr(1);
    res.push(string);
    return res;
}

stringifyNumbers 솔루션

function stringifyNumbers(obj) {
    var newObj = {};
    for (var key in obj) {
        if (typeof obj[key] === 'number') {
        	newObj[key] = obj[key].toString();
        } else if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
        	newObj[key] = stringifyNumbers(obj[key]);
        } else {
        	newObj[key] = obj[key];
        }
    }
    return newObj;
}

collectStrings 솔루션: Helper 메소드 재귀 버전

function collectStrings(obj) {
    var stringsArr = [];

    function gatherStrings(o) {
        for(var key in o) {
            if(typeof o[key] === 'string') {
            	stringsArr.push(o[key]);
            }
            else if(typeof o[key] === 'object') {
            	return gatherStrings(o[key]);
            }
        }
    }
    gatherStrings(obj);
    return stringsArr;
}

collectStrings 솔루션: 순수 재귀 버전

function collectStrings(obj) {
    var stringsArr = [];
    for(var key in obj) {
        if(typeof obj[key] === 'string') {
        	stringsArr.push(obj[key]);
        }
        else if(typeof obj[key] === 'object') {
        	stringsArr = stringsArr.concat(collectStrings(obj[key]));
        }
    }

    return stringsArr;
}

'개발공부 > 알고리즘' 카테고리의 다른 글

Ascii code를 사용한 문제풀이  (0) 2022.12.16
스터디하면서 배우는 것들  (0) 2022.09.27
Graph  (0) 2022.09.22
트리  (1) 2022.09.21
QUEUE  (0) 2022.09.20