程序中的一些思想
看过MOOC上的阚道宏的c++课程,感觉讲语法方面基本上是照本宣科,但是谈到的几个程序思维让人眼前一亮。
后续有新的感悟将不定期跟新。
结合自己的理解,记录如下:
1.关于递推 recursion 和递归 regression
两者是相反的思维,recursion是已知问题N,由解决问题1开始,不断由简到繁一直到N。
递归regression是把问题转化为问题N-1,不断转化一直到问题1。利用解决问题1之后的结果再解决高阶问题,整个流程是先降阶再回归。
从cs的角度来说,regression 占用的内存更多,因为每调用一次自身,内存中的栈都要加载一个栈帧。
但是,只要recursion 能解决的问题 regression 都能解决,反之则不然。这也是regression的优势所在。
2.关于面向过程 process-oriented(P-O) 和面向对象 object-oriented(O-O)
先假设 程序 program = data+algorithm
P-O的实质是algorithm 模块化,data 不分离。这样在大型工程开发时码农可以各自为战开发 submodule,同时数据用extern 处理。
开发的时候尚可,后期更迭修改的时候就会有问题,就是改动一个数据需要跟着修改多个函数,牵一发而动全身。
O-O应运而生,实质就是将全部data 和所有algorithm 都分离,然后将有关系的data和algorithm 组合在一起,相当于用户自定义的类,在整体开发的时候,有人负责造类,有人负责用类实例化对象。