我正在练习递归。从概念上讲,我知道它应该如何工作(请参阅下文),但是我的代码不起作用。
请告诉我我在做什么错。并请说明您的代码的每个步骤及其工作方式。清晰的解释比仅给我有效的代码好十倍。
/*
buildList(0, 5) == buildList(0, 5 - 1) // [0]
buildList(0, 4) == buildList(0, 4 - 1) // [0,0]
buildList(0, 3) == buildList(0, 3 - 1) // [0,0,0]
buildList(0, 2) == buildList(0, 2 - 1) // [0,0,0,0]
buildList(0, 1) == buildList(0, 1 - 1) // [0,0,0,0,0]
*/
var buildList = function(value, length) {
var result = [];
if (length === 0) {
return result;
}
result.push(value);
return buildList(result.push(value), length - 1);
};
buildList(0, 5);
我了解递归在概念上是如何工作的。
最佳答案
您的方法行不通,因为基本情况返回了一个新的空数组,而其他情况则返回了递归的结果。
相反,您应该先递归然后推送
var buildList = function(value, length) {
if (length <= 0) return [];
var recur = buildList(value, length-1);
recur.push(value);
return recur;
};
另外,在基本情况下,您可以避免创建新数组
var buildList = function(value, length, array=[]) {
if (length <= 0) return array;
array.push(value);
return buildList(value, length-1, array);
};