排序算法
冒泡排序/Bubble Sort
插入排序/Insertion Sort
归并排序/Merge Sort
快速排序/Quick Sort
拓扑排序/Topological Sort
递归和回溯/Recursion & Backtracking
递归的基本性质:函数调用本身
把大规模的问题不断地变小,再进行推导的过程
回溯:利用递归的性质
从问题的起始点出发,不断尝试
返回一步甚至多步再做选择,直到抵达终点的过程
递归
递归算法是一种调用自身函数的算法
特点:乐意使一个看似复杂的问题变得简洁和易于理解
经典案例:汉诺塔(又称河内塔)
递归的算法思想
要懂得如何将一个问题的规模变小
再利用从小规模问题中得出的结果
结合当前的值或者情况,得出最终的结果
通俗理解(自顶向下算法)
把要实现的递归函数,看成已经实现好的
直接利用解决一些子问题
思考:如何根据子问题的解以及当前面对的情况得出答案
递归写法结构总结
function fn(n)
{
//第一步:判断输入或者状态是否非法
if (input/state is valid)
{
return;
}
//第二步:判断递归是否应当结束
if (match condition)
{
return some value;
}
//第三步: