Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用递归的奇偶_Javascript_Recursion - Fatal编程技术网

Javascript 使用递归的奇偶

Javascript 使用递归的奇偶,javascript,recursion,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);

我的作业是使用递归函数返回给定的数字是奇数还是偶数(布尔值):
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
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
下面的代码给出了任何数字的
false

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
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

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

这样,递归基本情况将如下所示:

a) 我们达到
0
,数字是偶数

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

以下是伪代码:

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

注意:这只适用于正数。对于负数,您应该做加法而不是减法。

代码中的主要问题是

  • 您测试一个赋值,
    n=1
    。比较操作将是
    n==1
  • 您的递归案例导致一个无效操作:

    返回n-t(n-2)

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

修复
if
条件。将递归调用更改为仅
t(n-2)

如果您遇到进一步的问题,请尝试插入一些策略性的place
print
语句来跟踪执行路径和一个或两个有效值。

您应该将If条件中的赋值等号替换为比较等号。如果你的函数返回一个布尔值,你不能用函数的结果减去n变量,因为它们分别是整数和布尔值。我希望我能帮你一把。

=不是用来比较的……你为什么需要这个?@CarlosFranco,因为他的老师让他写的,当然。@Teemu我给这些赋值n,没有比较here@user7428900你不想被指派<代码>如果(n=0){应该是
如果(n==0){
。你试图检查
n
的值,不是吗?我想说的是…如果
number
是负数,这会爆炸:-)想法是把OP指向正确的方向,而不是清楚地解决他们的HW:)如果你与除法的其他部分比较,解决负数问题