Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回NaN的JavaScript递归函数_Javascript_Function_Recursion_Nan - Fatal编程技术网

返回NaN的JavaScript递归函数

返回NaN的JavaScript递归函数,javascript,function,recursion,nan,Javascript,Function,Recursion,Nan,如果为s!调用下面的JavaScript函数nuovaX,则返回NaN=0。我怎样才能摆脱这个 function d(s,di,dd){ var ris=di*Math.pow(dd,s); return ris; } function nuovaX(s,di,dd,angolo,xi){ var x=0; if(s==0){ x=xi; } else{ x=nuovaX(s-1,di,dd,ango

如果为
s!调用下面的JavaScript函数
nuovaX
,则返回
NaN
=0
。我怎样才能摆脱这个

function d(s,di,dd){
    var ris=di*Math.pow(dd,s);
    return ris;
}

function nuovaX(s,di,dd,angolo,xi){
    var x=0;
    if(s==0){
        x=xi;       
    }
    else{
        x=nuovaX(s-1,di,dd,angolo)+d(s,di,dd)*Math.cos(s*angolo);
    }
    return x;
}

这里缺少
xi

x=nuovaX(s-1,di,dd,angolo)+d(s,di,dd)*Math.cos(s*angolo);
                        /\
                        /\

所以在第二次迭代中,xi是
未定义的

将其简化了一点:

function d(s, di, dd){
    return di * Math.pow(dd, s);
}

function nuovaX(s, di, dd, angolo, xi){
    if(s==0) return xi;
    return nuovaX(s-1, di, dd, angolo) + d(s, di, dd) * Math.cos(s * angolo);
}

nuovaX
需要5个参数,但它对自身的递归调用只接收4个参数-缺少
xi

您可以创建一个小提琴来测试它。至少,我们需要看到示例调用及其预期结果。显然这是一个不受欢迎的观点,但我不同意反对票——我明白为什么@Leonardo Mutti觉得没有必要在这个案件中提供任何额外的信息。函数正在返回NaN-这意味着发生了一些无效的数学运算,因此不需要额外的上下文。@GershomMaes虽然我们现在知道了原因,但传递给函数的参数可能会导致错误,但在
s
0
的情况下不会检查这些参数。例如,如果调用函数时将
angolo
参数设置为
“foo”
null
,则函数也会失败。(现在,这值四张反对票吗?可能不值得。)我只是假设参数不是问题的一部分——它似乎是隐含的。也许有必要明确指出:P