递归遍历示例

递归遍历树

getTreeList (list) {
 const vm = this
 for (let item of list) {
   item.label = item.menucname
   item.id = item.taskcode
   if(vm.flag === '0'){ //查看过来树禁用
     item.disabled = true
   }
   vm.expandList.push(item.taskcode) // 树默认展开一级菜单的集合
   item.children = item.childMenuList
   if (item.children && item.children.length > 0) {
     vm.getTreeList(item.children);
   }
 }
 vm.list1length += list.length  //总长度
 console.log(vm.list1length, '总长度');
 vm.treeList = data.data
 // 判断全选按钮是否勾选
 if(vm.checkedList.length === (vm.list1length+vm.list2length+vm.list3length+vm.list4length)){
   vm.checkAll=true
 }
}

一般递归实现阶乘

function fact(n) {
  if (n == 0 || n == 1) {
    return 1;
  } else {
    return n * fact(n - 1);
  }
}
一般递归需要中栈上维护函数的调用信息直到函数返回后才释放,容易发生『栈溢出』错误。但对于尾递归来说,
只需要维护一个调用记录。

尾递归实现阶乘:

什么是尾递归?
在计算机科学里,尾调用是指一个函数里的最后一个动作是一个函数调用的情形:即这个调用的返回值直接被当前函数返回的情形。这种情形下称该调用位置为尾位置。若这个函数在尾位置调用本身(或是一个尾调用本身的其他函数等等),则称这种情况为尾递归,是递归的一种特殊情形。—— 维基百科

function fact-iter(n, a) {
  if (n == 0) {
    return 1;
  } else if (n == 1) {
    return a;
  } else {
    return fact-iter(n - 1, n * a);
  }
}

function fact(n) {
  return fact-iter(n, 1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值