2016-06-08 8 views
3

Ich habe eine Wiederholungsserie, also habe ich in Rekursionsform umgewandelt. Aber es wird angezeigt, wie maximale Stapelgröße erreicht.Was ist falsch an meinem Rekursionscode?

Derselbe Code ist arbeitet mit n = 4 als fn (4) und funktioniert korrekt, aber nicht mit höheren Werten arbeiten. Was ist das Problem, mit höheren Werten wie n = Math.pow (10, 18)

var fn = function(n){ 

    // take initial value of f(0) = 1 & f(1) = 1 
    if(n===1 || n=== 0)  return 1; 

    //calculate on basis of initial values 
    else if (n === -1) return (fn(1) - 3* fn(0) - gn(-1) - 2* gn(0)); 

    else 
     return (3*fn(n-1) + 2 * fn(n-2) + 2* gn(n-1) + 3* gn(n-2)); 
}; 

var gn = function(n){ 

     // take initial value of g(0) = 1 & g(1) = 1 
     if (n === 1 || n === 0) return 1; 

     //calculate on basis of initial values 
     else if(n === -1) return ((gn(1) - gn(0))/2); 

     else return (gn(n-1) + 2* gn(n-2)); 
    }; 

Antwort

4

Das Problem mit dem höheren Werten, wie n = Math.pow(10, 18) ist, dass der Stapel einfach nicht so groß ist. (Nicht einmal in der Nähe.) Sie können normalerweise eine Stapeltiefe von ein paar Tausend haben, und nicht viel mehr.

Sie sollten stattdessen Iteration verwenden.

+0

Gibt es im obigen Code auch ein Kündigungsrisiko? –

+0

@AnuragJain Nur wenn Sie ein negatives 'n' haben. Deine Base Cases sehen gepflegt aus. – Jashaszun

+0

Ich war eigentlich auf der Suche nach einem schnelleren Weg, um dieses Problem zu lösen. Kann ich in meinem Fall Memo oder Iteration verwenden? –

Verwandte Themen