// 재귀함수로 구현
function countDown(num){
//Base Case
if(num <= 0) {
console.log("All done!");
return;
}
console.log(num);
num--;
countDown(num);
}
countDown(3)
// 반복문으로 구현
function countDown(num){
for(var i = num; i > 0; i--){
console.log(i);
}
console.log("All done!")
}
function sumRange(num) {
//Base Case
if (num === 1) return 1;
return num + sumRange(num - 1);
}
sumRange(3) //6
//1. return 3 + sumRange(2)
//2. return 2 + sumRange(1)
//3. return 1 <Base Case>
//콜스택은 LIFO방식이라 거꾸로 호출됨 3 > 2 > 1 순서로 나감
//반복문으로 구현하기
function factorial(num){
let total = 1;
for(let i = num; i > 1; i--){
total *= i
}
return total;
}
//재귀함수로 구현하기
function factorial(num){
//Base Case
if(num === 1) return 1;
return num * factorial(num-1);
}
//외부함수를 호출해서 무언가를 내부로 전달할수 있다.
function outer(input){
var outerScopedVariable = []
function helper(helperInput){
// modify the outerScopedVariable
helper(helperInput--)
}
helper(input)
return outerScopedVariable;
}
//배열에서 모든 홀수값을 수집
function collectOddValues(arr){
let result = []
function helper(helperInput){
if(helperInput.length === 0) {
return;
}
if(helperInput[0] % 2 !== 0){
result.push(helperInput[0])
}
//더 작은 부분배열을 만들어서 helper로 전달하고, 다시 실헹
helper(helperInput.slice(1))
}
helper(arr)
return result;
}
collectOddValues([1,2,3,4,5])
function collectOddValues(arr){
let newArr = [];
if(arr.length === 0) {
return newArr;
}
if(arr[0] % 2 !== 0){
newArr.push(arr[0]);
}
//재귀힘수가 호출될때마다 newArr는 다시 초기화
newArr = newArr.concat(collectOddValues(arr.slice(1)));
return newArr;
}
collectOddValues([1,2,3,4,5]) // [1,3,5]
//1.[1].concat(collectOddValues([2,3,4,5]))
//2. [].concat(collectOddValues([3,4,5]))
//3. [3].concat(collectOddValues([4,5]))
//4. [].concat(collectOddValues([5]))
//5. [5].concat(collectOddValues([]))
//6. []
//콜스택에서 꺼내지는건 6>5>4>3>2>1
Array.prototype.slice(begin,end)
- slice() 메서드는 어떤 배열의 begin 부터 end 까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환. 원본 배열은 바뀌지 않는다.
- begin
- optional, 0을 시작으로 하는 추출 시작점에 대한 인덱스를 의미
- 음수 인덱스는 배열의 끝에서부터의 길이를 나타낸다.
- slice(-2) 는 배열에서 마지막 두 개의 엘리먼트를 추출
- end
- optional, 추출을 종료 할 0 기준 인덱스, end 인덱스를 제외하고 추출
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant']; animals.slice(1) // ["bison","camel", "duck", "elephant"] animals.slice(2, 4) // ["camel", "duck"] animals.slice(-2) // ["duck", "elephant"] animals.slice(2, -1) // ["camel", "duck"] animals.slice() // ["ant", "bison", "camel", "duck", "elephant"]
Array.prototype.concat()
- concat() 메서드는 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환, 원본 배열은 바뀌지 않는다.
const array1 = ['a', 'b', 'c']; const array2 = ['d', 'e', 'f']; const array3 = array1.concat(array2); console.log(array3); //["a", "b", "c", "d", "e", "f"]