07 极客大学-算法训练营-覃超-第七课.pdf

树的解法,一般使用递归

递归

循环
通过函数体调用自己实现循环

mutual exclusive(互斥)
complete exhaustive(完全详尽)

代码模板(补充JS版本的)

https://shimo.im/docs/EICAr9lRPUIPHxsH/read

  1. // JavaScript
  2. const recursion = (level, params) =>{
  3. // recursion terminator 递归中止条件
  4. if(level > MAX_LEVEL){
  5. process_result // 处理最终的结果
  6. return;
  7. }
  8. // process current level 处理当前层的逻辑
  9. process(level, params)
  10. //drill down 处理下一层的逻辑
  11. recursion(level+1, params)
  12. //clean current level status if needed 如果需要处理当前层的状态
  13. }

实战题目


  1. const recursion = ()=>{
  2. let result = []
  3. const backtrack = (路径,选择列表)=>{
  4. if(满足结束条件){
  5. result.push(结果值)
  6. return;
  7. }
  8. for(选择 in 选择列表){
  9. 做选择
  10. backtrack(路径,选择列表)
  11. 撤销选择
  12. }
  13. }
  14. }