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:)如果你与除法的其他部分比较,解决负数问题