我的递归代码有什么问题?
what is wrong with my recursion code?
我有一个递归系列,所以我已经转换成递归形式。
但它会显示已达到最大堆栈大小。
相同的代码 使用 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));
};
更高值的问题,例如n = Math.pow(10, 18)
,就是堆栈根本没有那么大。 (甚至不接近。)您通常可以拥有几千的堆栈深度,而不是更多。
您应该改用迭代。
我有一个递归系列,所以我已经转换成递归形式。 但它会显示已达到最大堆栈大小。
相同的代码 使用 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));
};
更高值的问题,例如n = Math.pow(10, 18)
,就是堆栈根本没有那么大。 (甚至不接近。)您通常可以拥有几千的堆栈深度,而不是更多。
您应该改用迭代。