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 (m.sbmmt.com). !