Eli*_*zio 0 javascript math recursion
我试图在JavaScript中得到一个特定的融合系列函数:
function cnvg(sum,marker){
if((marker--||1000)>=0){
return cnvg(sum=(sum||0) + 1/Math.pow(-3,marker)/(2*marker+1), marker)
} else {
return sum;
}
}
Run Code Online (Sandbox Code Playgroud)
我期待cnvg()回来相当于Math.PI/Math.sqrt(12)(见下面的图片),但我不断得到"超出最大调用堆栈大小"错误.我认为它可能是迭代次数,所以我把1000引用放到了100当时10最后1,但我似乎仍然收到错误.
从理论上讲,一旦marker倒数到0并执行最后一个循环,它应该停止并返回值sum,但这似乎不是这样的情况......任何人都可以告诉我我做错了什么?
提前致谢.
marker永远不会被赋值cnvg(),导致无限递归.你的意思是:
function cnvg(sum, marker) {
marker = (typeof(marker) === 'undefined') ? 1000 : marker;
if (marker-- >= 0) {
return cnvg(sum=(sum||0) + 1/Math.pow(-3,marker)/(2*marker+1), marker)
} else {
return sum;
}
}
Run Code Online (Sandbox Code Playgroud)
但那给了我3 + Math.PI/Math.sqrt(12)...(3.9068996821171087)
marker--检查后执行减法,从而产生额外的术语marker = -1.使用--marker或> 0,或更清楚:
marker = (typeof(marker) === 'undefined') ? 1000 : marker - 1;
if (marker >= 0) {
// ...
Run Code Online (Sandbox Code Playgroud)