Heim  >  Fragen und Antworten  >  Hauptteil

Eingeschränkte Fibonacci-Folge

<p>Ich möchte eine Funktion implementieren, die die Fibonacci-Sequenz von <code>N</code> generiert und <code>array[K]</ zurückgibt. Code>-Elemente, davon <code>(0<=N<=370; 0<=N+K<=371; 0<=K<=255)</code>. Wenn die Eingabe <code>n:370, k:1</code> ist, liegt der letzte Versuch, <code>n2</code>, außerhalb der Notwendigkeit und des Umfangs. Ich möchte meinen Code vereinfachen und nicht mehrere <code>if</code>-Anweisungen verwenden. Danke. </p><p><strong>Update: </strong></p><p>Dies ist ein Smart Contract für Blockchain, bei dem <code>int</code> . Wenn <code>N+K >= 369</code>, läuft die letzte Schleife von <code>n2</code> </p> <pre class="brush:js;toolbar:false;">function getFibSeq(n, k) { let zahlen = []; sei n1 = 0; sei n2 = 1; sei i = 0; sei j = (n + k); while (i < j){ if((i - n) >= 0){ Ausgabe.push(n1); } if((j - i - 1) > 0){ sei temp = n1; n1 = n2; if((j - i - 2) > 0) { n2 = Temperatur + n2; } } ich = ich + 1; } Rückgabeausgabe; } </pre> <p><br /></p>
P粉463811100P粉463811100405 Tage vor430

Antworte allen(1)Ich werde antworten

  • P粉098979048

    P粉0989790482023-08-17 16:52:41

    有一个用于计算第n个斐波那契数的封闭公式,被称为Binet公式。这使您可以在O(1)的渐近时间复杂度内获得第n个数。

    下面是一个示例,展示如何计算任意n的斐波那契数。

    将此扩展以解决您的特定问题。我建议计算n-1n的值。然后迭代k次以获得所需的值。在进行迭代时跟踪结果,您应该没问题。

    function fibonacci(n) {
        const phi = (1 + Math.sqrt(5)) / 2;
        const psi = (1 - Math.sqrt(5)) / 2;  // phi的负倒数
        return Math.round((Math.pow(phi, n) - Math.pow(psi, n)) / Math.sqrt(5));
    }
    
    // 测试
    console.log(fibonacci(10));  // 输出:55

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

    Antwort
    0
  • StornierenAntwort