2015-05-04 49 views
2

這個遞歸函數有什麼問題? FAC(5)給出的NaN我的javascript遞歸有什麼問題?

function fac(num){ 
    while(num>2){ 
    return(num*fac(num-1)) 
    } 
} 
+4

因爲你還沒有處理'NUM < = 2'。因此,在某些時候,你的代碼會將數字乘以'undefined'。 –

+2

@VigneswaranMarimuthu將此作爲回答添加,以便可以關閉問題。 – MisterJ

回答

4

fac(1)沒有回報,這是undefined,並undefined*1NaN,這就是原因。

更改您的代碼

function fac(num){ 
    return num>2 ? num*fac(num-1) : 1; 
} 
2

正確的方法應該是:

function fact(num) { 
    if(num > 2) 
     return num * fact(num - 1); 
    else 
     return num; 
} 
2

男 - 不是一個數字錯誤,通常發生但不限於,當我們嘗試應用數字操作一個不是數字的值。

當前的問題是當輸入值小於2時,函數返回undefined,它不是數字,所以return (num*fac(num-1))將由於num * undefined而失敗。 來解決這個問題,我們必須返回一個值時數爲2或小於2

function fact(num) { 
    if(num > 2) 
     return num * fact(num - 1); 
    else 
     return num; 
} 
+1

你的第一句話可能會讓人認爲對數字應用數字操作不會產生NaN。請修復它。 –

+0

感謝您指出,糾正了句子描繪相同 –

1

什麼是你的代碼錯誤

function fac(num){ 
    while(num>2){ 
    return(num*fac(num-1)) 
    } 
} 
  • 沒有找到num <= 2返回值。所以,在某些時候你的代碼將成倍Numberundefined導致NaN

  • while循環不需要

function fac(num) { 
 
    return (num > 2) ? num * fac(num - 1) : 1; 
 
} 
 

 
alert(fac(5));