递归 - 循环:通过函数体来进行循环
举例:
1.从前有个⼭山,
2.⼭山⾥里里有个庙,
3.庙⾥里里有个和尚讲故事:
1.从前有个⼭山,
2.⼭山⾥里里有个庙,
3.庙⾥里里有个和尚讲故事:
......
递归代码模板
Class recursion(level, param1, param2, ...)
//递归终止条件
if(level >MAX_LEVEL){
print_result
return
}
//当前层的逻辑
process_data(level, data...)
//开始递归下一层
recursion(level + 1 ,p1...)
//如果需要,请反转当前级别状态
revers_state(level)
分治 - Divde & Conquer
分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)等等。
使用分治的基本情况:
1.问题缩小到一定规模容易解决
2.分解成的子问题是相同种类的子问题,即该问题具有最优子结构性质
3.分解而成的小问题在解决之后要可以合并
4.子问题是相互独立的,即子问题之间没有公共的子问题
扫描二维码关注公众号,回复:
5905445 查看本文章
分治代码模板:
Class divide_conquer(problem,param1,param2...){
//递归终止
if(probem is none){
print_result
return
}
//预处理数据
data = prepare_data(problem);
subproblems = split_problem(problem,data)
//解决子问题
sub_result1 = divide_conquer(subprolems[0],p1...)
sub_result2 = divide_conquer(subproblems[1],p1...)
sub_result3 = divi_conquer(subproblem[2],p1...)
}