我想实现一个函数,生成从
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;
}
有一个封闭的公式来计算第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 中浮点运算的限制,它可能会失去较大值的精度。