function fib(n) {
const result = [0, 1];
for (var i = 2; i <= n; i++) {
const a = (i - 1);
const b = (i - 2);
result.push(a + b);
}
return result[n];
}
console.log(fib(8));
以上代码的输出为13
。我不了解for循环部分。在第一次迭代i = 2
中,但是在第二次迭代i = 3
之后,a = 2
和b = 1
以及第三次迭代i = 4
这样,a = 3
,{{1} },依此类推...如果继续进行,则最后一个序列将是:
b = 2
,这是不正确的。正确的顺序为[0, 1, 1, 3, 5, 7, 9, 11]
答案 0 :(得分:4)
您没有使用数组中已有的前两个数字>生成要插入到数组中的新斐波那契数。
https://www.mathsisfun.com/numbers/fibonacci-sequence.html
在这里,我使用了result[i-2]
和result[i-1]
的总和来生成新的斐波那契数并将其推入数组。
要生成n
个术语,还需要条件为i < n
而不是i <= n
。
function fib(n) {
const result = [0, 1];
for (var i = 2; i < n; i++) {
result.push(result[i-2] + result[i-1]);
}
return result; // or result[n-1] if you want to get the nth term
}
console.log(fib(8));
如果要获得第n个术语,请返回result[n-1]
。
答案 1 :(得分:1)
此功能不正确。只需在函数返回之前添加console.log
调用即可进行检查:
function fib(n) {
const result = [0, 1];
for (var i = 2; i <= n; i++) {
const a = (i - 1);
const b = (i - 2);
result.push(a + b);
}
console.log(result);
return result[n];
}
console.log(fib(7));
如您所见,序列是错误的,并且(对于n = 7
)返回值也是如此。
可能的更改如下:
function fib(n) {
const result = [0, 1];
for (var i = 2; i <= n; i++) {
const a = result[i - 1];
const b = result[i - 2];
result.push(a + b);
}
console.log(result);
return result[n];
}
console.log(fib(8));
这是“经典”斐波那契数;如果您确实要使用0
而不是1
的第一个数字,则应该使用return result[n-1]
,因为数组索引从零开始。
答案 2 :(得分:1)
递归斐波那契数列的一种方法是递归:
var fibonacci = {
getSequenceNumber: function(n) {
//base case to end recursive calls
if (n === 0 || n === 1) {
return this.cache[n];
}
//if we already have it in the cache, use it
if (this.cache[n]) {
return this.cache[n];
}
//calculate and store in the cache for future use
else {
//since the function calls itself it's called 'recursive'
this.cache[n] = this.getSequenceNumber(n - 2) + this.getSequenceNumber(n - 1);
}
return this.cache[n];
},
cache: {
0: 0,
1: 1
}
}
//find the 7th number in the fibbonacci function
console.log(fibonacci.getSequenceNumber(7));
//see all the values we cached (preventing extra work)
console.log(fibonacci.cache);
//if you want to output the entire sequence as an array:
console.log(Object.values(fibonacci.cache));
上面的代码也是dynamic programming方法的示例。您可以看到,我第一次将每个结果存储在cache
方法中的getSequenceNumber
对象中。这样,第二次要求getSequenceNumber
查找给定的输入时,它不需要做任何实际的工作-只需从cache
中获取值并返回它即可!这是一种优化技术,可以应用于类似这样的函数,在这些函数中,您可能不得不多次查找特定输入的值。
答案 3 :(得分:1)
我的斐波那契数列解决方案:
const fibonacci = n =>
[...Array(n)].reduce(
(acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i),
[]
)
答案 4 :(得分:0)
您做错了的是添加迭代器索引(i),而您需要做的是在result
中的该索引处添加元素。
function fib(n) {
const result = [0, 1];
for (let i = 2; i <= n; i++) {
const a = result[(i - 1)];
const b = result[(i - 2)];
result.push(a + b);
}
console.log("Result Array: " + result);
return result[n];
}
console.log("Fibonacci Series element at 8: " + fib(8));
答案 5 :(得分:0)
逻辑有两个问题:
变量a
和b
当前是指i - 1
和i - 2
。相反,它们应该引用result
数组的元素,即result[i - 1]
和result[i - 2]
。
如果需要数组的第8个元素,则需要调用result[7]
。因此,返回值应该是result[n - 1]
而不是result[n]
。
function fib(n) {
const result = [0, 1];
for (var i = 2; i < n; i++) {
const a = result[i - 1];
const b = result[i - 2];
result.push(a + b);
}
console.log(result);
return result[n - 1];
}
console.log(fib(8));
答案 6 :(得分:0)
斐波那契数列的简单解决方案:
function fib(n){
var arr = [];
for(var i = 0; i <n; i++ ){
if(i == 0 || i == 1){
arr.push(i);
} else {
var a = arr[i - 1];
var b = arr[i - 2];
arr.push(a + b);
}
}
return arr
}
console.log(fib(8))
答案 7 :(得分:0)
这肯定是“一种以上的清洁鸡的方式”类型的情况之一,下面的JavaScript方法对我有用。
function fibCalc(n) {
var myArr = [];
for (var i = 0; i < n; i++) {
if(i < 2) {
myArr.push(i);
} else {
myArr.push(myArr[i-2] + myArr[i-1]);
}
}
return myArr;
}
fibCalc(8);
当如上所述调用时,将产生[0,1,1,2,3,5,8,13] 它使我可以根据n获得一系列fib编号。
答案 8 :(得分:0)
const fib = n => {
const array = Array(n);
for (i = 0; i < array.length; i++) {
if (i > 1) {
array[i] = array[i - 1] + array[i - 2];
} else {
array[i] = 1;
}
}
return array;
}
console.log(fib(5))
答案 9 :(得分:0)
function fib(n) {
const result = [0];
if (n > 1) {
result.push(1);
for (var i = 2; i < n; i++) {
const a = result[result.length - 1]
const b = result[result.length - 2];
result.push(a + b);
}
}
console.log(result);
}
答案 10 :(得分:0)
我想出了这个解决方案来获得n指数斐波那契值。
function findFac(n){
if (n===1)
{
return [0, 1];
}
else
{
var s = findFac(n - 1);
s.push(s[s.length - 1] + s[s.length - 2]);
return s;
}
}
function findFac0(n){
var vv1 = findFac(n);
return vv1[n-1];
}
console.log(findFac0(10));
答案 11 :(得分:0)
在这里,您只需进行很少的参数检查,而无需使用异常处理
function fibonacci(limit){
if(typeof limit != "number"){return "Please enter a natural number";}
if(limit <=0){
return "limit should be at least 1";
}
else if(limit == 1){
return [0];
}
else{
var series = [0, 1];
for(var num=1; num<=limit-2; num++){
series.push(series[series.length-1]+series[series.length-2]);
}
return series;
}
}
答案 12 :(得分:0)
我想出了这个解决方案。
function fibonacci(n) {
if (n == 0) {
return [0];
}
if ( n == 1) {
return [0, 1];
} else {
let fibo = fibonacci(n-1);
let nextElement = fibo [n-1] + fibo [n-2];
fibo.push(nextElement);
return fibo;
}
}
console.log(fibonacci(10));