javascript - 通过从 n 中减去 2 直到 n = 0 或 1 来确定数字是偶数还是奇数的递归函数
问题描述
零是偶数。
一个是奇怪的。
对于任何其他数 N,其均匀度与 N - 2 相同。
定义一个递归函数 isEven 对应这个描述。该函数应该接受一个参数(一个正整数)并返回一个布尔值。
这是我对 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;
}?
不执行?
解决方案
您需要从递归调用中返回结果。
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));
没有零件的更好的样式else
,因为如果之前返回,这不是必需的。
- 直接使用值,如果只使用一次,
- 使用严格比较(身份/严格相等运算符
===
),因为不严格会导致错误的假设 - 直接计算参数而不为不再使用的变量重新赋值
let isEven = function(n){
if (n === 0) return true;
if (n === 1) return false;
return isEven(n - 2);
};
console.log(isEven(50));
console.log(isEven(21));
推荐阅读
- python - 如何消除“-: 'str' and 'str' 的不支持的操作数类型”错误,如下所示?
- api - 如何使用 IBM Cloud Speech to Text API 请求多个频道
- ruby-on-rails - 有效令牌?即使访问令牌无效也返回 True
- javascript - React JS:祖父组件的 setState 方法不会更新孙子输入字段 onChange 事件单击的状态
- mesos - 马拉松应用程序的单个实例创建多个 docker 容器
- c++ - 为什么我的 LogError 函数会重置 GetLastError?
- python - leetcode 53.Maximum Subarray 的 Time Limit Exceeded 错误是怎么回事?
- python - 如何将每一行中的数据重命名为熊猫中的唯一编号?
- javascript - 我可以在带有js的移动应用程序中使用click事件监听器吗?还是我应该坚持 touchstart
- android - 如何在Playstore上更新密钥后制作apk