打印最后两个斐波那契数的副本
printing duplicate of last two number of fibonacci
我正在尝试打印最多 n 个斐波那契数列。由于某些原因,下面的代码将最后一个数字打印了两次,请帮忙。
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
fib.push(fib[i]);
}
console.log( fib );
}
您需要在索引处分配值 或 推总和。
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i = 2; i < n; i++) {
fib[i] = fib[i - 2] + fib[i - 1]; // either this assignm. or the next line only
// fib.push(fib[i - 2] + fib[i - 1]);
}
return fib;
}
console.log(fibonacci(8));
你做错了:你首先在数组中创建第 n 个元素,然后将相同的元素压入数组,复制它。您不需要 push 命令。
正确的代码是:
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
}
console.log( fib );
}
fibonacci(5);
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
// Remove the following line as you are already assigning the value in the line above.
//fib.push(fib[i]);
}
console.log( fib );
}
只需删除
fib.push(fib[i]);
然后
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
}
}
fibonacci(7);
给出输出:
[ 0, 1, 1, 2, 3, 5, 8 ]
更新
在发表评论后,我修复了代码,以便 i=1
可以使用它
"use strict";
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
for (i=1; i<n; i++) {
fib[i] = ((fib[i-2]!==undefined)?fib[i-2]:1) + fib[i-1];
}
console.log(fib)
}
fibonacci(1);
fibonacci(2);
fibonacci(7);
[ 0 ]
[ 0, 1 ]
[ 0, 1, 1, 2, 3, 5, 8 ]
我删除了 fib[1]
的定义,总而言之,仅当 fib[i-2]
为 undefinted
时,才为它们提供 i
元素使用值 1
这意味着只有在i=1
时才满足这个条件,因为循环从1
开始,而tablefib
没有key-1
。当 i
大于 1
时,则 fib[i-2]
存在且等式具有先前的值。
我正在尝试打印最多 n 个斐波那契数列。由于某些原因,下面的代码将最后一个数字打印了两次,请帮忙。
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
fib.push(fib[i]);
}
console.log( fib );
}
您需要在索引处分配值 或 推总和。
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i = 2; i < n; i++) {
fib[i] = fib[i - 2] + fib[i - 1]; // either this assignm. or the next line only
// fib.push(fib[i - 2] + fib[i - 1]);
}
return fib;
}
console.log(fibonacci(8));
你做错了:你首先在数组中创建第 n 个元素,然后将相同的元素压入数组,复制它。您不需要 push 命令。
正确的代码是:
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
}
console.log( fib );
}
fibonacci(5);
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
// Remove the following line as you are already assigning the value in the line above.
//fib.push(fib[i]);
}
console.log( fib );
}
只需删除
fib.push(fib[i]);
然后
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
fib[1] = 1;
for (i=2; i<n; i++) {
fib[i] = fib[i-2] + fib[i-1];
}
}
fibonacci(7);
给出输出:
[ 0, 1, 1, 2, 3, 5, 8 ]
更新
在发表评论后,我修复了代码,以便 i=1
"use strict";
function fibonacci(n) {
let i;
const fib = [];
fib[0] = 0;
for (i=1; i<n; i++) {
fib[i] = ((fib[i-2]!==undefined)?fib[i-2]:1) + fib[i-1];
}
console.log(fib)
}
fibonacci(1);
fibonacci(2);
fibonacci(7);
[ 0 ]
[ 0, 1 ]
[ 0, 1, 1, 2, 3, 5, 8 ]
我删除了 fib[1]
的定义,总而言之,仅当 fib[i-2]
为 undefinted
时,才为它们提供 i
元素使用值 1
这意味着只有在i=1
时才满足这个条件,因为循环从1
开始,而tablefib
没有key-1
。当 i
大于 1
时,则 fib[i-2]
存在且等式具有先前的值。