我想编写一个递归函数来获取 (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/