先来占个坑,主要是为了破除一下自己对于递归(分而治之)思想的迷雾。
打算介绍一下自己的心路历程与看书的经历。
前景提要:
1.递归会成指数式增加,如果数据量大,坚决不能用,但在数据量小时,显得优雅而简单,如同Python一样【此处Q一下算法题用Python的各路大神,各种疑难杂症一行代码解决┗|`O′|┛】;
2.递归必须有明显的结束条件,否则等着栈溢出吧;
3.子问题和父问题必须处理方式一致【当然,递归结束语句不算在内】;
1.什么是递归?
简单地说,递归就是函数调用自身的过程,但具体到语言上,有些微差别,例如C语言允许调用main函数递归,而C++不允许【没想到C++这么喜欢妥协的语言居然强硬了一次Σ(っ °Д °;)っ】
2.如何实现递归?
returnType funName(inputType Parameter){
statement1;
/*recursion*/
funName(Parameter);
statement2;
}
对于上述代码,运行过程中,statement1会顺序执行,statement2则会逆序执行。
刨个小坑,后续补一个C++递归的代码。
以单序列归并排序为例,statement1就可以只判断结束(即left<right);而statement2则是逆向的排序过程。
还有很多细节知识。
但是递归的代码至少你记住三段即可:
1.传入参数;
2.退出条件;
3.递归;
4.处理(其实处理可以是递归前处理,也可以是递归后处理);