Javascript Recursion?
Javascript Recursion?
本文关键字:Recursion Javascript 更新时间:2023-09-26
我正在练习递归。从概念上讲,我理解这应该如何工作(见下文),但我的代码不起作用。
请告诉我我做错了什么。请解释代码的每一步以及它是如何工作的。清晰的解释比只给我一个有效的代码要好十倍。
/*
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);
};
问题是,每次调用函数时,result
变量都会重新初始化为[]
。如果您在函数外声明该变量,则代码有效:
var result = [];
var buildList = function(value, length) {
if(length === 0){
return result;
}
result.push(value);
return buildList(result.push(value), length - 1);
};
buildList(0, 5);
console.log(result);
/*
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 result = []; //(1)
var buildList = function(value, length) {
if (length === 0) {
return result;
}
result.push(value);
return buildList(value, length - 1); //(2)
};
buildList(0, 5);
你做错了两件事:
- 您正在初始化方法内部的结果。这意味着每次进行递归方法调用时,都要将结果重置为一个空数组
- 您正在将数组传递到buildlist()的递归调用中。您希望在其中传递值
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- Javascript Recursion?
- JavaScript for Random Numbers with Recursion
- Javascript, Node, Promises, and recursion
- Recursion Javascript
- Javascript:从具有奇怪格式的XML文件中获取值(Recursion?)
- Code Academy 4/26 Javascript Recursion
- Javascript getters and setters - recursion issue
- Javascript recursion settimeout