2015-11-27 171 views
-4

如果调用s!=0,则JavaScript函数nuovaX返回NaN。我怎样才能摆脱这一点?返回NaN的JavaScript递归函数

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; 
} 
+0

你可以创建一个小提琴,我们可以测试它。 – Rajesh

+0

至少,我们需要看到示例调用及其预期结果。 –

+0

显然是一个不受欢迎的观点,但我不同意这个反对票 - 我可以理解为什么@Leonardo Mutti在这种情况下不需要提供任何额外的信息。函数返回NaN - 这意味着发生了一些无效的数学运算,因此不需要额外的上下文。 –

回答

2

简化了一点:

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

1

这里缺少xi

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

所以在第二次迭代xiundefined