回溯和递归的概念
函数直接或间接调用自身的过程称为递归,对应的函数称为递归函数。而回溯是使用递归解决问题的算法技术,它尝试逐步构建解决方案,一次一个,删除那些在任何时间点都不能满足问题约束的解决方案。回溯可以定义为一种通用算法技术,它考虑搜索所有可能的组合以解决计算问题。
递归的性质
1.使用不同的输入多次执行相同的操作。
2.在每一步中都尝试使用较小的输入来使问题变小。
3.需要一个基本条件来停止递归,否则将发生无限循环。
回溯中存在三种类型的问题
决策问题——寻找可行的解决方案。
优化问题——寻找最佳解决方案。
枚举问题——找到所有可行的解决方案。
回溯和递归有什么区别?
1.回溯总是使用递归来解决问题,但递归并不总是需要回溯。
2.每一步的回溯都会消除那些无法为我们提供解决方案的选择,并继续进行那些有可能将我们带到解决方案的选择;递归函数通过调用自身的副本并解决原始问题的较小子问题来解决特定问题。
3.回溯实现起来相对复杂;递归是回溯本身的一部分,写起来更简单。
4.回溯的应用是N皇后问题、迷宫老鼠问题、骑士巡游问题、数独问题、图着色问题;递归的应用包括树和图遍历、汉诺塔、分而治之算法、合并排序、快速排序和二进制搜索。