2015-11-27 224 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