JS经典的斐波那契挑战之间的差异两种解决方案

0

的问题

我有两个解决方案,以同样的挑战,这个经典的斐波那契挑战,每个人都知道如何解决这个问题(即使是你的宠物)。

我恳请你不要提出任何其他的解决方案。 我只是想比较一下这两个解决方案。 成千上万个不同的解决方案,可以发现与搜索。

挑战:

/*
     0  1  2  3  4  5  6  7   8   9 
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

     fib(3) returns 2
     fib(9) returns 34
     and so on...

*/

这两个解决方案下工作的罚款。 我唯一的问题是:

解决方案B 的运行速度慢于 解决方案的一个? 因为在 B 我们这行如下:

fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2])

不会的 length 能穿过整个阵列计算数量的项目? 或者已经返回,从立即?

解决方案的一个:

function fib(n) {
  const fiboArray = [0,1]
  for(let i=2; i <= n; i++) {
    fiboArray.push(fiboArray[i-2] + fiboArray[i-1])
  }
  return fiboArray[n]
}
console.log(fib(5))

方案B:

function fib(n) {
  const fibArr = [0, 1, 1]
  
  if(n == 0) {
    return 0
  }

  if(n == 1 || n == 2) {
    return 1
  }


  if (n > 2) {
    for (let i = 3; i <= n; i++) {
      fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2])
    }
  }
  
  return fibArr[fibArr.length - 1]
}


console.log(fib(9))
arrays javascript loops
2021-11-24 01:22:07
2

最好的答案

1

我同意CertainPerformance,解决方案的一个更好。

在许多情况下使用。长将只是作为快,因为将浏览器将预算并只作为有效,因为如果你让一个地方变自己,但是我认为在你的情况下解决方案是一个更好的因为你使用推阵期间的循环,使长将重新计算。

在回答 这一 职位会谈,但他并没有推像你一样。

2021-11-24 01:38:51
1

@MisterJojo可以请你告诉我一个代码的例子,以简化它?

function my_Fibonacci(n)
  {
  let a = 0
    , b = 1
    , r = [0, 1]
    ;
  for(let i=2; i<=n; i++)
    {
    r.push(a+b) // new fibonacci value
    a = b       // set a for next addition
    b = r[i]    // set b for next addition
    }
  // return r.join(' - ')
  return b
  }

document.write(my_Fibonacci(9))

2021-11-24 01:47:47

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................