2015-05-04 50 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));