Heim > Web-Frontend > js-Tutorial > Hauptteil

JS implementiert die Fibonacci-Sequenz

黄舟
Freigeben: 2017-02-10 09:49:18
Original
2180 Leute haben es durchsucht

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);
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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). !


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!