即使使用递归也很奇怪

时间:2017-06-26 17:25:23

标签: javascript recursion

我的作业是使用递归函数返回给定数字是奇数还是偶数(布尔值):偶数为true,奇数为false。我最终得到了两个类似的功能。

我的问题是,一个函数总是返回true,而其他函数总是返回false

以下代码为true提供了任何数字

function t(n){
    if (n=2){
      return true;
    }
    else if (n=1){
      return false;
    }
    else{
      return n-t(n-2);
    }
}


console.log(t(3));
// true

以下代码为false提供了任何数字

function t(n){
    if (n=0){
      return true;
    }
    else if (n=1){
      return false;
    }
    else{
      return n-t(n-2);
    }
}


console.log(t(3));
// false

3 个答案:

答案 0 :(得分:3)

这样做的一般方法是从每个递归级别的值中扣除2

这样,递归基本情况就是这样:if:

a)我们到达0,数字甚至是

b)我们到达1,数字是奇数。

这是伪代码:

evenOrOdd(number) {
  if number equals 0
    return 'even'
  if number equals 1
    return 'odd'
  return evenOrOdd(number - 2);
}

注意:这仅适用于正数。对于负数,你需要加法而不是减法。

答案 1 :(得分:1)

代码中的主要问题是

  • 您测试作业n=1。比较操作为n == 1
  • 您的递归案例会导致无效操作:

    返回n-t(n-2)

n是一个整数; t的返回值是布尔值(据说)。对于n = 4的简单情况,您打算返回什么?您再次拨打电话t(2)。这将返回true,因此您之前的调用现在评估4-true并返回该值。这不太可能是你想要的。

修复if条件。将递归调用更改为仅t(n-2)。 如果您遇到进一步的麻烦,请尝试插入一些策略性地点print语句来跟踪执行路径和一个或两个重要值。

答案 2 :(得分:1)

您应该使用比较等号替换if条件中的赋值等号。如果函数返回一个布尔值,则不能用函数的结果减去n变量,因为它们分别是整数和布尔值。我希望我伸出援助之手。