Javascript 我的递归代码有什么问题?

Javascript 我的递归代码有什么问题?,javascript,recursion,data-structures,recurrence,Javascript,Recursion,Data Structures,Recurrence,我有一个递归序列,所以我转换成了递归形式。 但它将显示为达到最大堆栈大小 与fn(4)相同的代码在n=4的情况下正常工作,但不能在较高的值下工作。n=Math.pow(10,18)等更高的值有什么问题 更高的值,例如n=Math.pow(10,18)的问题在于堆栈没有那么大。(甚至不接近)通常可以有几千个堆栈深度,而不是更多 您应该改用迭代。上述代码中是否也存在终止问题?@AnuragJain除非您有否定的n。你的基本案例看起来已经处理好了。我实际上在寻找更快的方法来解决这个问题。在我的案例中,

我有一个递归序列,所以我转换成了递归形式。 但它将显示为达到最大堆栈大小

与fn(4)相同的代码在n=4的情况下正常工作,但不能在较高的值下工作。n=Math.pow(10,18)等更高的值有什么问题


更高的值,例如
n=Math.pow(10,18)
的问题在于堆栈没有那么大。(甚至不接近)通常可以有几千个堆栈深度,而不是更多


您应该改用迭代。

上述代码中是否也存在终止问题?@AnuragJain除非您有否定的
n
。你的基本案例看起来已经处理好了。我实际上在寻找更快的方法来解决这个问题。在我的案例中,我可以使用备忘录还是迭代?@AnuragJain我建议两者都使用。
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));
    };