這個遞歸函數有什麼問題? FAC(5)給出的NaN我的javascript遞歸有什麼問題?
function fac(num){
while(num>2){
return(num*fac(num-1))
}
}
這個遞歸函數有什麼問題? FAC(5)給出的NaN我的javascript遞歸有什麼問題?
function fac(num){
while(num>2){
return(num*fac(num-1))
}
}
fac(1)
沒有回報,這是undefined
,並undefined*1
是NaN
,這就是原因。
更改您的代碼
function fac(num){
return num>2 ? num*fac(num-1) : 1;
}
正確的方法應該是:
function fact(num) {
if(num > 2)
return num * fact(num - 1);
else
return num;
}
男 - 不是一個數字錯誤,通常發生但不限於,當我們嘗試應用數字操作一個不是數字的值。
當前的問題是當輸入值小於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;
}
你的第一句話可能會讓人認爲對數字應用數字操作不會產生NaN。請修復它。 –
感謝您指出,糾正了句子描繪相同 –
什麼是你的代碼錯誤
function fac(num){
while(num>2){
return(num*fac(num-1))
}
}
沒有找到num <= 2
返回值。所以,在某些時候你的代碼將成倍Number
與undefined
導致NaN
while
循環不需要
function fac(num) {
return (num > 2) ? num * fac(num - 1) : 1;
}
alert(fac(5));
因爲你還沒有處理'NUM < = 2'。因此,在某些時候,你的代碼會將數字乘以'undefined'。 –
@VigneswaranMarimuthu將此作爲回答添加,以便可以關閉問題。 – MisterJ