javascript - 如何编写递归函数来获取某个范围内的值?

标签 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));

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

最佳答案

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

/**
 * 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;
  }
}

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

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

(但请注意,如果您调用 range(2,3),您的代码将陷入无限循环。)

关于javascript - 如何编写递归函数来获取某个范围内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32592883/

相关文章:

c# - 运行时异常,递归太深

具有尾递归优化的 C# 编译?

c++ - 在递归函数中递增

javascript - 我们什么时候赋值调用jQuery事件?

javascript - 有没有办法使用浏览器的控制台从用户那里获取数据

Javascript Tic-tac-toe,如何在模块之间通信 'move'

javascript - 是否可以将 ref 添加到 props.children 元素?

javascript - 使用 javascript 替换函数与正则表达式的 <span> 和 </span> 的困难...全包

.net - (反向?)树枚举

c - 使用 C 递归地将整数读入大小正确的数组