Maison > interface Web > js tutoriel > JS implémente la séquence de Fibonacci

JS implémente la séquence de Fibonacci

黄舟
Libérer: 2017-02-10 09:49:18
original
2279 Les gens l'ont consulté

Saisissez n et trouvez le nième terme de la séquence de Fibonacci

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);
}
Copier après la connexion

Ce n'est en fait pas une très bonne méthode
Par exemple, lors de la recherche de fibonacci(10), il est décomposé en fibonacci( 9) et fibonacci(8), mais fibonacci(9) sera décomposé en fibonacci(8) et fibonacci(7), dans lesquels fibonacci(8) est calculé à plusieurs reprises, et ainsi de suite. est d'enregistrer Les valeurs calculées sont les suivantes :

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();
Copier après la connexion

Les deux méthodes ci-dessus utilisent des fermetures

L'inconvénient de fibonacci3 est que tant que fibonacci3 n'est pas libéré, le tableau arr existera toujours dans la mémoire. Surtout après avoir calculé des nombres relativement grands ; mais lorsqu'un grand nombre de nombres de Fibonacci doivent être calculés, fibonacci3 sera plus avantageux, mais n'oubliez pas de libérer fibonacci3 à la fin, c'est-à-dire :

fibonacci3 = null;
Copier après la connexion

Une autre méthode est Pas besoin de récursivité, il suffit de boucler directement

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;
}
Copier après la connexion

Ce qui précède est le contenu de l'implémentation JS de la séquence de Fibonacci. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal