我刚从Js开始,我遇到了Js的问题,找不到类似的解决方案,如果有人帮忙的话,我会很感激的。
var i = 0;
var j = 1;
var k = 0;
function fibbo(n) {
if (n === 1) {
console.log([0]);
} else if (n === 2) {
console.log([0, 1]);
} else {
while (k <= n) {
var l = [0, 1];
var b = l.length;
l.push(l[b - 2] + l[b - 1]);
k++;
}
}
return l;
}
fibbo(4);
console.log(l);
发布于 2022-01-15 22:32:17
如果在函数中使用变量,请确保在本地声明变量。您可以以不同的方式处理基本案例(设置length
属性),还有最近的JS方法Array#at
.:
function fibo(n) {
const l = [0, 1];
while (l.length < n) l.push(l.at(-2) + l.at(-1));
l.length = n; // for the case n < 2
return l;
}
console.log(fibo(4));
发布于 2022-01-15 22:15:45
除了尝试访问函数之外的l
之外,当向函数提供0或1时,返回语句中的l
有时是未定义的。更重要的是,l
不应该在while循环中定义,而应该在它的外部定义。
此外,您有未使用的变量,如i
和j
,以及正在使用但其作用域有问题的k
:
increased
k
用于跟踪迭代次数,而您的代码指出n
应该是返回的数字的数量。
这里有一种更简化的逻辑,假设n
被认为是要返回的斐波纳契数:
如果是array
n
时才停止运行。在while循环中,我们保留推送数字的逻辑,但否则不需要有任何其他变量为incremented.。
参见概念证明示例:
function fibbo(n) {
if (n === 1) {
return [0];
} else if (n === 2) {
return [0, 1];
} else {
const l = [0, 1];
while (n > l.length) {
const b = l.length;
l.push(l[b - 2] + l[b - 1]);
}
return l;
}
}
console.log(fibbo(4));
发布于 2022-01-15 22:26:26
使用while
循环,我的看法如下:
n = 0 || n = 1
。If n > 1
,它循环n - 1
次数,在每次迭代中,它将现有序列中前两个值的总和添加到最后一个索引中。
循环完成后,整个序列被裁剪为n
的长度并返回。(这最后一次修整部分最初在我的解决方案中缺失,并在阅读trincot的答案后添加)
const fibbo = (n) => {
const sequence = [0, 1];
let i = 2;
let next;
while(i <= n) {
next = sequence[i - 2] + sequence[i - 1];
sequence[i++] = next;
}
return sequence;
}
console.log(fibbo(6));
https://stackoverflow.com/questions/70725808
复制相似问题