我试图解决一个递归问题,获取范围 (x, y) 内的整数。
这需要负数和正数。
预期结果的示例如下:
range(2,9); // => [3,4,5,6,7,8]
range(7,2); // => [6, 5, 4, 3]
range(-9,-4)) // => [-8,-7,-6,-5]
目前我有 ff:
var range = function(x, y) {
var result = [];
if(x < y){
for(var i = x+1; i < y; i++){
result.push(i);
}
return result;
}
if(x > y){
for(var j = x-1; j > y; j--){
result.push(j);
}
return result;
}
};
如何使用给定规则将 for 循环转换为递归。
最佳答案
var range = function (x, y, r = []) {
const step = x > y ? -1 : 1; // this determines if your range goes up or down
if(x === y) return [];
if(x === y - step) return r;
return r.concat(x + step, range(x + step, y));
}
console.log(range(9,2));
console.log(range(2,9));
console.log(range(9,9))
console.log(range(-7, -15));
console.log(range(-15, -7))
基本逻辑是将x
插入数组中,然后concat
下一个x
的范围
到y
,无论它比当前的x
小还是大
关于javascript - JavaScript 中的范围递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48312680/