Web/Javascript

[Javascript] 모던 JS 6.1 (재귀와 스택) 과제

동띵 2022. 7. 1. 11:27

1) 주어진 숫자까지의 모든 숫자 더하기

// 1. for 반복문 사용
function sumTo(num) {
    let sum = 0;
    for (let i=1; i<=num; i++) {
        sum += i;
    }
    return sum;
}

// 2. 재귀 사용
function sumTo(num) {
    if (num === 1) return 1;
    return num + sumTo(num-1);
}

// 3. 등차수열 공식 사용
function sumTo(num) {
    return num * (num+1) / 2;
}

 

2) 팩토리얼 계산하기

function factorial(num) {
    if (num === 1) return 1;
    return num * factorial(num-1);
}

 

3) 피보나치 수 계산하기

function fib(num) {
    let a = 1;
    let b = 1;
    for (let i=3; i<=num; i++) {
        let c = a+b;
        a = b;
        b = c;
    }
    return b;
}

 

4) 단일 연결 리스트 출력하기

// 1. 반복문 기반
function printList(list) {
    let tmp = list;
    while (tmp) {
        alert(tmp.value);
        tmp = tmp.next;
    }
}

// 2. 재귀 기반
function printList(list) {
    alert(list.value);
    if (list.next) {
        printList(list.next);
    }
}

 

5) 단일 연결 리스트를 역순으로 출력하기

// 1. 반복문 기반
function printReverseList(list) {
  let arr = [];
  let tmp = list;

  while (tmp) {
    arr.push(tmp.value);
    tmp = tmp.next;
  }

  for (let i=arr.length-1; i>=0; i--) {
    alert( arr[i] );
  }
}

// 2. 재귀 기반
function printReverseList(list) {
  if (list.next) {
    printReverseList(list.next);
  }
  alert(list.value);
}