ホームページ  >  記事  >  ウェブフロントエンド  >  JSはフィボナッチ数列を実装します

JSはフィボナッチ数列を実装します

黄舟
黄舟オリジナル
2017-02-10 09:49:182235ブラウズ

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) は繰り返し計算されます。 最も簡単な方法は、計算された値を記録することです。

上記の 2 つのメソッドはクロージャを使用します。fibonacci3 の欠点は、fibonacci3 が解放されない限り、arr 配列が常にメモリ内に存在することです。特に比較的大きな数値を計算した後、大量のフィボナッチ数を計算する必要がある場合は、fibonacci3 の方が有利ですが、最後に fibonacci3 を解放することを忘れないでください。
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();

上記はフィボナッチ数列を js で実装する内容です。その他の関連内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。