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)