>웹 프론트엔드 >JS 튜토리얼 >JS는 피보나치 수열을 구현합니다.

JS는 피보나치 수열을 구현합니다.

黄舟
黄舟원래의
2017-02-10 09:49:182254검색

n을 입력하고 피보나치수열의 n번째 항을 찾는다

function fibonacci(n) {
  if (n < 0) {
throw new Error('输入的数字不能小于0');
  }
  if (n == 0) {
return 0;
  } 
  if (n == 1) {
return 1;
  }
  return fibonacci(n-1) + fibonacci(n-2);
}

사실 별로 좋은 방법은 아니다
예를 들어 fibonacci(10)을 구하면 fibonacci(9)로 분해된다. 및 fibonacci(8)이 있지만 fibonacci(9)는 fibonacci(8)과 fibonacci(7)로 분해되며, 여기서 fibonacci(8)는 반복적으로 계산됩니다. 가장 간단한 방법은 다음과 같습니다. 계산된 값 기록:

function fibonacci2(n) {
  if (n < 0) throw new Error('输入的数字不能小于0');
  let arr = [0, 1];
  function calc(n) {
  if (n<2) {
      return arr[n];
  }
  if (arr[n] != undefined) {
      return arr[n];
  }
  let data = calc(n-1) + calc(n-2);
  arr[n] = data;
  return data;
  }
  return calc(n);
}

function fibonacciFunc() {
  let arr = [0, 1];
  function calc(n) {
    if (n < 0) throw new Error('输入的数字不能小于0');
    if (n<2) return arr[n];
    if (arr[n] != undefined) {
      return arr[n];
    }
    let data = calc(n-1) + calc(n-2);
    arr[n] = data;
    return data;
  }

  return calc;
}   
let fibonacci3 = fibonacciFunc();

위의 두 가지 방법은 클로저를 사용합니다

fibonacci3의 단점은 fibonacci3이 해제되지 않는 한 arr 배열이 항상 존재한다는 것입니다. 메모리. 특히 상대적으로 큰 수를 계산한 후에는 fibonacci 수를 많이 계산해야 하는 경우 fibonacci3이 더 유리하지만 마지막에 fibonacci3을 해제해야 한다는 점을 기억하세요. 즉,

fibonacci3 = null;

다른 방법은 다음과 같습니다. 재귀를 사용하여

function fibonacci4 (n) {
  if (n < 0) throw new Error('输入的数字不能小于0');
  let dataMinusTwo= 0,
    dataMinusOne = 1,
    data;
  if (n == 0) return dataMinusTwo;
  if (n == 1) return dataMinusOne;
  for (var i=2;i<=n;i++) {
    data = dataMinusOne + dataMinusTwo;

    dataMinusTwo = dataMinusOne;
    dataMinusOne = data;
  }
  return data;
}

를 직접 반복합니다. 위 내용은 피보나치 수열을 구현하기 위한 js의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.