我对递归函数有疑问。我有一个对象树,我必须通过递归循环并进入水平,一些对象属性有子数组等等。
我有一个函数,我得到对象树和级别(从一开始就是0)作为参数如下:
var foo = function(objTree, level) {}
在这个函数中,我必须循环遍历“objTree”并创建一个Node对象(构造函数)的实例,它执行一些Tab键并创建“/ n”换行符。
ObjTree是一个复杂的对象,包含一个HTML结构,其子元素包含其他子元素的数组
var foo = function(objTree, level) {
if (!objTree || !objTree.children) {
if(objTree.type === "text" && objTree.data.length > 0){
jadeNodesArr.push(objTree.data);
}
return;
}
objTree.children.forEach(function(child){
singleNodesObj = new Node(objTree.name, level, objTree.data);
test = singleNodesObj.toString();
jadeNodesArr.push(test);
foo(child, level +1);
});
}
我的问题是这个递归函数不能正常工作,并且回调中使用的“child”对象确实正确输出。我使用递归函数错误的目的是循环使用子元素(数组)的对象树???
答案 0 :(得分:1)
如评论中所述,您的示例中没有递归调用。
递归函数调用自身。
这是一个人为的示例,说明函数可能如何工作,递归地读取树。
// Given a root node, this function
// will recursively process the whole tree
function processTree(tree) {
if (typeof tree === 'object') {
// We expect trees to be objects
// with left and right branches.
//
// These are *recursive* calls,
// we continue to process sub-trees
// in the same way we process the root tree.
processTree(tree.left);
processTree(tree.right);
} else {
// This is a leaf.
// We're not processing a tree anymore.
// This is the end of recursion, no more
// recursive calls.
console.log(tree);
}
}
// Just an example tree
var root = {
left: {
left: 1,
right: {
left: 2,
right: 3
},
},
right: {
left: {
left: 4,
right: 5
},
right: 6
}
};
processTree(root);
// prints 1 2 3 4 5 6