Javascript程序产生未定义的(递归)

时间:2018-08-02 03:28:28

标签: javascript

你好,我是学习Js的新手 我正在尝试学习递归,但是我一直停留在这里

var isEven = (number) =>{
  number = Number(number)
  if(number === 0){
    console.log('it is even')
    return true;
  }
  else if(number === 1){
    return false;
  }
  else{
    number = number - 2;
    isEven(number);
  }
}

console.log(isEven(50) === true)

为什么最终结果变得不确定?谢谢您的帮助

2 个答案:

答案 0 :(得分:1)

在递归调用中添加收益:

function isEven(number){
  number = Number(number)
  if(number === 0){
    console.log('it is even');
    return true;
  }
  else if(number === 1){
    return false;
  }
  else{
    number = number - 2;
    return isEven(number);
  }
}

console.log(isEven(50));

答案 1 :(得分:0)

您必须在递归调用中使用return。如果您不使用return,则isEven(50)函数将运行但不返回isEven(48),因此您的isEven(50)函数未定义,因此请始终使用return。 例子

function factorial( n ) {
  if ( n === 1 ) {
    return 1;
  }
  return n * factorial( n - 1 );
}

在上面的示例中,您可以在我们调用阶乘(n-1)时;它将返回(n-1)* factorial(n-2);但是如果您删除返回值,则结果未定义为阶乘(n-1);不返回任何东西。 永远记住,在递归中,重点是一次又一次地返回函数,直到获得结果为止。