Heim >Web-Frontend >js-Tutorial >JS implementiert die Fibonacci-Sequenz

JS implementiert die Fibonacci-Sequenz

黄舟
黄舟Original
2017-02-10 09:49:182259Durchsuche

Geben Sie n ein und finden Sie den n-ten Term der Fibonacci-Folge

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);
}

Dies ist eigentlich keine sehr gute Methode
Beim Finden von Fibonacci(10) wird es beispielsweise in Fibonacci( 9) und Fibonacci(8), aber Fibonacci(9) wird in Fibonacci(8) und Fibonacci(7) zerlegt, wobei Fibonacci(8) wiederholt berechnet wird, und so weiter. Es gibt viele wiederholte Berechnungen soll aufzeichnen Die berechneten Werte lauten wie folgt:

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();

Die beiden oben genannten Methoden verwenden Abschlüsse

Der Nachteil von fibonacci3 besteht darin, dass das arr-Array solange fibonacci3 nicht freigegeben wird wird immer im Gedächtnis vorhanden sein. Besonders nach der Berechnung relativ großer Zahlen; wenn jedoch eine große Anzahl von Fibonacci-Zahlen berechnet werden muss, ist Fibonacci3 vorteilhafter, aber denken Sie daran, Fibonacci3 am Ende freizugeben, das heißt:

fibonacci3 = null;

Eine andere Methode ist Keine Rekursion erforderlich, sondern eine direkte Schleife

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;
}

Das Obige ist der Inhalt von js zur Implementierung der Fibonacci-Sequenz. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). !


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn