有限斐波那契数列

问题描述 投票:0回答:1

我想实现一个函数,生成从

N
N+K
的斐波那契数列,并返回
array[K]
项,项为
(0<=N<=370; 0<=N+K<=371; 0<=K<=255)
。 当输入为
n2
时,最后一次尝试
n:370, k:1
是不需要的并且已经过时了。如何进行此操作并跳过最后一个
n2
元素而不使用多个
if
所以我想简化我的代码。谢谢。
更新:
这是区块链的智能合约,其中
int
是 256 位,并且
n2
在最后一个循环中具有溢出值。

function getFibSeq(n: number , k: number) {
  let  numbers = [];

  let n1 = 0;
  let n2 = 1;
  let i = 0;
  let j = (n + k);

  while (i < j){
    if((i - n) >= 0){
      output.push(n1);
    }
    if((j - i - 1) > 0){
      int temp = n1;
      n1 = n2;
      if((j - i - 2) > 0) {
        n2 = temp + n2;
      }
    }

    i = i + 1;
  }

  return output;
}
javascript fibonacci
1个回答
0
投票

有一个封闭的公式来计算第n个斐波那契数,称为比奈公式。这允许您以

O(1)
渐近时间复杂度获得第 n 个数字。

下面为您提供了如何计算此类

n
的示例。

扩展它来解决您的具体问题。我建议计算

n-1
n
的值。然后迭代 k 次以获得所需的值。随时跟踪结果,您应该会很好。

function fibonacci(n) {
    const phi = (1 + Math.sqrt(5)) / 2;
    const psi = (1 - Math.sqrt(5)) / 2;  // Negative inverse of phi
    return Math.round((Math.pow(phi, n) - Math.pow(psi, n)) / Math.sqrt(5));
}

// Test
console.log(fibonacci(10));  // Outputs: 55

注意:虽然此公式给出了较小值的精确结果 � n,由于 JavaScript 中浮点运算的限制,它可能会失去较大值的精度。

© www.soinside.com 2019 - 2024. All rights reserved.