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

时间:2016-06-08 16:20:45

标签: javascript recursion data-structures recurrence

我有一个递归系列,所以我已经转换为递归形式。 但它会显示达到的最大堆栈大小。

相同的代码使用n = 4 作为fn(4)并且正常工作但不使用更高的值。更高的值有什么问题,例如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));
    };

1 个答案:

答案 0 :(得分:4)

值较高的问题,例如n = Math.pow(10, 18),堆栈根本就不那么大。 (甚至没有关闭。)你通常可以有几千的堆栈深度,而不是更多。

您应该使用迭代。