递归函数,通过从n减去2直到n = 0或1来确定数字是偶数还是奇数

时间:2019-05-11 17:25:37

标签: javascript recursion

零是偶数

一个很奇怪。

对于任何其他数字N,其均匀度与N-2相同。

甚至定义一个与该描述相对应的递归函数。该函数应接受一个参数(正整数)并返回一个布尔值。

这是我对isEven的实现:

let isEven = function(n){
    even = 0;
    odd = 1;
    if(n == even){
      return true;
    }
    else if (n == odd) {
      return false;
    }
    else{
      n -= 2;
      console.log(n); //Used to see value of n through each call
      isEven(n);
    }
  };

当我调用此函数时,它返回undefined

  document.write(isEven(50)); //prints `undefined`

console.log(n)的输出如下:

Failed to load resource: net::ERR_FILE_NOT_FOUND
48
46
...
0

我不确定为什么Failed to load resource: net::ERR_FILE_NOT_FOUND是第一个输出,但是在此之后,n达到了0,所以为什么

if(n == even){
          return true;
        }?  

不执行?

2 个答案:

答案 0 :(得分:2)

您需要从递归调用中返回结果。

public Intent(Context packageContext, Class<?> cls) {
    mComponent = new ComponentName(packageContext, cls);
}

没有Class<*>部分的更好的样式,因为如果以前返回就没有必要。

  • 直接使用值(如果仅使用一次)
  • 使用严格比较(Identity/strict equality operator ===),因为不严格会导致错误的假设
  • 直接对参数进行计算,而无需为不再使用的变量重新分配值

let isEven = function(n){
    const          // declare local variables/constants
        even = 0,
        odd = 1;
    if(n == even){
      return true;
    }
    else if (n == odd) {
      return false;
    }
    else{
      //n -= 2; no need to reassign a value for a single use
      return isEven(n - 2); // return here
    }
  };

console.log(isEven(50));
console.log(isEven(21));

答案 1 :(得分:1)

但不要错过学习mutual recursion的机会!

const isEven = (n = 0) =>
  n === 0
    ? true
    : isOdd (n - 1)

const isOdd = (n = 0) =>
  n === 0
    ? false
    : isEven (n - 1)
    
console .log
  ( isEven (0)  // true
  , isEven (1)  // false
  , isEven (2)  // true
  , isEven (3)  // false
  , isEven (99) // false
  )
  
console .log
  ( isOdd (0)  // false
  , isOdd (1)  // true
  , isOdd (2)  // false
  , isOdd (3)  // true
  , isOdd (99) // true
  )