工作用用到了递归函数,写起来感觉奇奇怪怪的,这里总结一下逻辑。

思路

/**
 *  递归函数:
 *    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
}