JavaScript中的范围递归

时间:2018-01-18 01:54:37

标签: javascript recursion

我试图解决一个递归问题,该问题得到范围(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循环转换为递归。

1 个答案:

答案 0 :(得分:1)

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下一个range x的{​​{1}},无论它是小于还是大于当前y