小码哥《恋上数据结构与算法第二季》笔记(十四、十五):尾调用、尾递归、回溯、剪枝

775 阅读1分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

尾调用(Tail Call)

一、概念

  • 一个函数的最后一个动作是调用函数。
  • 如果最后一个动作是调用自身,成为尾递归,是尾调用的特殊情况。
  • 很多编译器会对尾递归函数进行优化,空间复杂度会降低。所以可以将递归优化成尾递归

回溯(Back Tracking)

一、概念

  • 回溯可以理解为:通过选择不同的岔路口来通往目的地。
  • 每一步都选择一条路触发,能进则进,不能进则退回上一步(回溯),换一条路再试。
  • 树前序遍历和图的深度优先搜索(DFS)就是典型的回溯算法。

二、练习

面试题 08.12. 八皇后

剪枝(Pruning)

  • else中的代码就代表剪枝操作。(什么也不做)