알고리즘 - freeCodeCamp - Sum All Odd Fibonacci Numbers

NO PAIN, NO GAIN·2019년 11월 29일
0

algorithm

목록 보기
8/18

문제

매개변수 num까지 범위에서 fibonacci 수열 중에 홀수 인 숫자들의 합을 구하시오.

풀이

function sumFibs(num) {
  let num1 = 0;
  let num2 = 1;
  let sumNumbers = 1;
  
  const recursion = originNum => {
    let result = num1 + num2;
    if (result > originNum) {
      return sumNumbers;
    } else if (result <= originNum) {
      if (isOdd(result)) {
        sumNumbers += result;
      }
      num1 = num2; 
      num2 = result;
      return recursion(originNum);
    }
  }
  
  return recursion(num);
}

function isOdd(num) {
  if (num % 2) {
    return true;
  }
  return false;
}

피보나치수열이 어떤건지 알아야 한다. f1은 0, f2 는 1 이라고 한다면 f1과 f2의 합은 1 이다. 결과값을 f3이라 하자. f3에 f2의 값을 더하면 2가 되고 2 에 f3의 값을 더하면 3, 3에 2(이전 결과값)를 더하면 5 가 됩니다. 결과값의 이전의 결과값을 더 해가면서 수가 점점 커지게 된다.
피보나치 수열이 0부터 시작한다고 가정하고 변수 num1 = 0, num2 = 1 선언한다.
sumNumbers의 값은 1이다. 왜냐면 recursion 함수에서 재귀하면서 결과값에 더하기 때문에 1이 한번 밖에 나오지 않으니 1를 할당한다.
recursion 함수에는 result 변수가 있다. result 값은 num1과 num2의 더한 값이다. result가 매개변수 값보다 크면 sumNumbers를 반환한다. 그렇지 않고 result값이 매개변수 값보다 적거나 같으면 홀수 인지 판별한다. 홀수면 sumNumbers에 값을 더한다. 그리고 홀수, 짝수 상관없이 num1 은 num2의 값이 되고, num2는 result의 값이 된다.

profile
갈고 닦자.

0개의 댓글