工作用用到了递归函数,写起来感觉奇奇怪怪的,这里总结一下逻辑。
思路
/**
* 递归函数:
* 1. 递归函数中需要有 "跳出判断",当判断成立后,不会继续递归下去。
* 2. 若 "跳出判断" 不成立,则会继续递归。
* 3. 递归函数的参数,需要在递归函数中计算获取后传入。
*
* PS:
* 不要老想着递归的深度运行结构,多用语言暗示自己,只编写第一层逻辑代码,逻辑会清晰的多。
* 就像下面代码,用语言说就是:
* 如果参数为 1,则返回 1 即可(跳出递归)
* 若参数不是 1,则返回参数本身加上 "参数之前所有数值的总和"
* 而 "参数之前所有数值的总和" 通过 sum 函数获取,参数为当前参数 - 1 获得而来。
**/
// 这是一个只能传入 >= 0 的函数
// 将会返回 1 + 2 + 3 + 4 + ... + 参数 的总和
function sum (num) {
if (num === 1) {
return 1
}
else {
return arguments.callee(num - 1) + num
}
}
根据 “关键词” 递归搜索
百度找的
var getNewTreeData = function (treeData, value) {
if (!treeData) {
return null
}
var newTreeData = new Array()
var node = null
var children = null
var text = ''
for (var i = 0; i < treeData.length; i++) {//多个根节点开始遍历
node = treeData[ i ]
if (node.children) {
children = node.children
}
text = node.title
if (text.indexOf(value) > -1) {
newTreeData.push(node)
continue
}
else {
if (children) {
var newNodes = getNewTreeData(node.children, value)
if (newNodes.length > 0) {
node.children = newNodes
newTreeData.push(node)
}
}
}
}
return newTreeData
}