개발 여정/JavaScript

순수 재귀함수 (Pure Recursion)

calm-lee 2022. 10. 22. 10:59

 

 

순수 재귀

  • 필요한 모든 코드가 함수 자체에 포함되며 재귀적
  • helper 메소드 재귀와 같이 외부 데이터를 사용하지 않음

 

function collectOddValues(arr){
    let newArr = []; // newArr가 리셋되면서 빈 배열이 됨
    
    if(arr.length === 0){
        return newArr;
    } // 종료점 : arr의 길이가 0이 될 때

    if(arr[0] % 2 !== 0){
        newArr.push(arr[0]);
    } // arr의 첫 번째 값이 홀수일 경우 newArr 배열의 첫째 자리에 넣음

    newArr = newArr.concat(collectOddValues(arr.slice(1))); // arr.slice(1)으로 첫번째 값을 제외한 배열을 재귀로 돌리고, concat으로 홀수 배열인 newArr와 붙임
    return newArr;
}

 

배열을 사용하고 helper 메소드 없이 순수 재귀 솔루션을 작성하는 경우

  • 배열을 복사하는 slice, spread 연산자, concat을 사용하면 배열을 변경할 필요가 없음
  • String은 불변값이므로 위의 방법들을 통해서 사본을 만들어야 함
  • 객체의 사본을 만들 경우, Object.assign 혹은 spread 연산자 이용