JavaScript 返回 NaN 的递归函数

JavaScript recursive function returning NaN

JavaScript 函数 nuovaX 下面 returns NaN 如果它被调用为 s!=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);
                        /\
                        /\

所以在第二次迭代中 xiundefined

稍微简化一下:

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.