Javascript代码战争:Tribonacci序列



function tribonacci(signature, n) {
var myArray = [];
var lenArray = 0;
var i = 0;
var outPut = 0;
var x = 0;

if (n > 0) {
while (i < 3) {
myArray.push(signature[i]);
i++;
}
lenArray = myArray.length - 1;
i = 0;
while (lenArray < n) {
while (x < 3) {
var v = x + i;
outPut += myArray[v];
x++;
}
i++;
lenArray = myArray.length - 1;
myArray.push(outPut);
}
return myArray;
} else {
return [];
};
}
console.log(tribonacci([1, 1, 1], 10));

首先,我试图将前3项推到";myArray";。第二,在";而";循环,而它小于"0";n〃;(数组中需要的项目数(,加上"中的最后3个项目;myArray";直到";myArray";达到所需的";n〃;数量

例如tribonaci([1,1,1],10(返回值应为[1,1,1,3,5,9,17,31,57105]连续添加最后3个项目,直到达到数组中的10个项目。

相反,我得到的结果是:[1,1,1,3,3,3,3[3,3,3,3]

我不知道为什么它一直停留在3分。我试过";i++";在第2";而";循环,使得它可以开始每次添加最后3个项目;myArray";增长了一个,但这似乎不是问题所在。是";outPut";被困在3号?

var v = x + i;使用x来计算正确的索引。

将这3个数字相加后,需要重置x

此外,outPut在下一次迭代中会被重用,但它会不断添加值,因此您的输出会变高。这需要在3回路之后重置为0

outPut推入myArray后添加outPut = x = 0

function tribonacci(signature, n) {
var myArray = [];
var lenArray = 0;
var i = 0;
var outPut = 0;
var x = 0;

if (n > 0) {
while (i < 3) {
myArray.push(signature[i]);
i++;
}
lenArray = myArray.length - 1;
i = 0;
while (lenArray < n) {
while (x < 3) {
var v = x + i;
outPut += myArray[v];
x++;
}
i++;

lenArray = myArray.length - 1;
myArray.push(outPut);
outPut = x = 0
}
return myArray;
} else {
return [];
};
}
console.log(tribonacci([1, 1, 1], 10));


[
1,
1,
1,
3,
5,
9,
17,
31,
57,
105,
193,
355
]

一些提高可读性的奖励提示:

  • 使用(...(排列运算符替换第一个whilevar myArray = [ ...signature ];

  • 使用myArray.length - 1而不是关闭定义具有相同值的变量

  • 使用myArray[x + i]而不是关闭定义另一个可变

  • 返回n < 0,你不需要那么多

应用这些将给出:

function tribonacci(signature, n) {
var myArray = [ ...signature ];
var i = 0;
var x = 0;
var outPut = 0;
if (n < 0) {
return [];
}
while ((myArray.length - 1) < n) {
while (x < 3) {
outPut += myArray[x + i];
x++;
}
i++;
myArray.push(outPut);
outPut = x = 0;
}

return myArray;
}

嘿,你在做while循环的作业吗?如果是这样的话,请参考@0stone0的答案,它解决了问题!

另一方面,如果你想深入研究JS,我建议你一个更精确的解决方案,带有一些很酷的Array函数:

function tribonacci(signature, size) {
const output = signature;
while(output.length < size) {
output.push(output.slice(-3).sum());
}
return output;
}
console.log({ result: tribonacci([1, 1, 1], 10) });

JS的某些版本不包括Array.sum函数,它可能是这样的:

Array.prototype.sum = function() {
return this.reduce((sum, curr) => sum + curr, 0);
}

最新更新