这个递归函数有什么问题? 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