如何编写递归函数以获取范围内的值?

时间:2015-09-15 18:12:14

标签: javascript recursion

我想写一个递归函数来获取范围(x,y)中的整数。

示例:范围(2,9) 预期输出:[3, 4, 5, 6, 7, 8]

使用递归的建议解决方案如下:

var range = function(start_num, end_num) 
{
  if (end_num - start_num === 2) 
  {
    return [start_num + 1];
  } 
  else 
  {
    var list = range(start_num, end_num - 1);
    list.push(end_num - 1);
    return list;
  }
};

console.log(range(2,9));

但是,据我所知,递归,上面的解决方案不是递归的。我对吗?是否可以在递归函数中声明一个数组并将值推入其中?

1 个答案:

答案 0 :(得分:1)

为了解释递归编程是什么,让我举一个非常简单的例子:

/**
 * sum up the numbers from 0 to n, i.e. 0 + 1 + ... + n
 */
function sum(n) {
  if(n===0) {
    // trivial case
    return 0;
  }
  else {
    // difficult case -> reduce the problem from n to n-1
    return sum(n-1) + n;
  }
}

所以解决问题的递归模式是:如果问题很简单,给出答案,否则给出一个公式如何从一个稍微简单的相同类型的问题构造解决方案。

您的代码示例确实遵循此模式,因此 是递归编程。

(但请注意,如果您调用范围(2,3),您的代码将会遇到无限循环。)