有人可以向我解釋為什么我的 fibonacciGenerator 函式不適用于此代碼嗎?我理解為什么它可以與第二個代碼一起使用,但我只是不明白為什么第一個代碼不能。
function fibonacciGenerator(n) {
if (n > 0) {
var fArray = [];
fArray.push(0);
if (n >= 2) {
fArray.push(1);
}
for (var i = 0; i < n; i ) {
fArray.push(fArray[i] fArray[i 1]);
}
console.log(fArray);
}
}
fibonacciGenerator(1);
fibonacciGenerator(2);
第二個代碼作業:
function fibonacciGenerator(n) {
if (n > 0) {
var fArray = [];
fArray.push(0);
if (n >= 2) {
fArray.push(1);
}
for (var i = 2; i < n; i ) {
fArray.push(fArray[i - 1] fArray[i - 2]);
}
console.log(fArray);
}
}
fibonacciGenerator(1);
fibonacciGenerator(2);
uj5u.com熱心網友回復:
第一個代碼列印 2 個額外的斐波那契數,這是因為:
您首先將 0 和 1 推入陣列:
var fArray = [];
fArray.push(0);
if (n >=2 ){
fArray.push(1);
}
然后你再次回圈直到 n 次。由于這個原因,它列印了兩個額外的斐波那契數。
解決方案是回圈 n-2 次或使用第二個代碼。
uj5u.com熱心網友回復:
var fArray = [];
fArray.push(0);
if (n >= 2) {
fArray.push(1);
}
初始條件是覆寫n=1: [0]和n=2: [0,1]
第二個代碼正在作業,因為回圈僅在n大于時開始i,所以意味著它跳過回圈n < 2。
對于您的問題,當n < 2.
for (var i = 0; i < n; i ) {
fArray.push(fArray[i] fArray[i 1]);
}
您可以想象n < 2使用回圈時的結果將如下所示。請注意,初始值為fArray = [0]
fArray.push(fArray[0] fArray[1]); //fArray[1] is undefined because you only have 1 item in your array
在這種情況下fArray[0] fArray[1] ==> 0 undefined = NaN
所以這就是為什么你的邏輯在n < 2
要糾正它,您需要避免回圈 ifn < 2
//if n=1 or n=2, it won't trigger the loop due to `i < n-2`
for (var i = 0; i < n-2; i ) {
fArray.push(fArray[i] fArray[i 1]);
}
uj5u.com熱心網友回復:
從 0 而不是 2 開始,并相應地調整回圈體的想法i很好,但是第一個版本沒有調整一件事:回圈的停止條件。
通過設定i=0,第一個版本的回圈次數是第二個版本的 2 倍。您還應該以相同的方式更改結束條件:而不是i < n,它應該具有i < n - 2,以確保迭代次數與第二個版本中的相同。
與您的問題無關,但console.log最好將其放在函式之外。該函式的作業應該是回傳陣列,而不是列印它。同樣,當n > 0為假時,它應該回傳一個空陣列。
function fibonacciGenerator(n) {
var fArray = [];
if (n > 0) {
fArray.push(0);
if (n >= 2) {
fArray.push(1);
}
for (var i = 0; i < n - 2; i ) {
fArray.push(fArray[i] fArray[i 1]);
}
}
return fArray;
}
console.log(fibonacciGenerator(1));
console.log(fibonacciGenerator(2));
uj5u.com熱心網友回復:
首先,您必須識別模式。
Fibonacci series -> 0 1 1 2 3 5 8 13 21
Term -> 0 1 2 3 4 5 6 7 8
0th term =0, 1st term =1
從第二學期開始,
2nd = 1st term 0th term = 1 0 = 1
3rd = 2nd term 1st term = 1 1 = 2
4th = 3rd term 2nd term = 2 1 = 3
5th = 4th term 3rd term = 3 2 = 5
nth = (n-1) (n-2)
由于前兩項是固定的,因此您必須從 i= 2 開始 for 回圈。此外,根據上面顯示的模式,您必須在 for 回圈中使用以下代碼。
fArray.push(fArray[i - 1] fArray[i-2]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/447466.html
標籤:javascript 算法
上一篇:Git個人訪問令牌快取
