我的作业是使用递归函数返回给定数字是奇数还是偶数(布尔值):偶数为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
答案 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变量,因为它们分别是整数和布尔值。我希望我伸出援助之手。