代码复用与函数递归-代码复用与模块化设计-函数递归的理解-函数递归的调用过程-函数递归实例解析1.代码复用与模块化设计1.1代码复用把代码当成资源进行抽象-代码资源化:程序代码是一种用来表达计算的资源-代码抽象化:使用函数等方法对代码赋予更高级别的定义-代码复用:同一份代码在需要时可以被重复使用函数和对象是代码复用的两种主要形式函数:将代码命名在代码层面建立了初步抽象对象:属性和方法a.b和a.b()在函数之上再次组织进行抽象对象抽象级别高于函数1.2模块化设计-通过函数或对象封装将程序划分为模块及模块间的表达-具体包括:主程序、子程序和子程序间关系-分而治之:一种分而治之、分层抽象、体系化的设计思想-紧耦合:两个部分之间交流很多,无法独立存在-松耦合:两个部分之间交流较少,可以独立存在-模块内部紧耦合、模块之间松耦合2.函数递归的理解递归:函数定义中调用函数自身的方式特征:-链条:计算过程存在递归链条-基例:存在一个或多个不需要再次递归的基例数学归纳法-证明当n取第一个值n0时命题成立-假设当nk时命题成立,证明当n=nk+1时命题也成立递归是数学归纳法思维的编程体现3.函数递归的调用过程n!等多少?数学上可以用以上公式描述,程序可以用函数+分支语句实现deffact(n):--ifn==0:----return1--else:----returnn*fact(n-1)参考程序,一个递归的实现可以总结如下:-递归本身是一个函数,需要函数定义方式描述-函数内部,采用分支语句对输入参数进行判断-基例和链条,分别编写对应代码递归过程中程序不断开辟新的内存区域,直到递归至已知解,在反向求解。4.函数递归实例解析4.1字符串的反转-函数+分支结构-递归链条-递归基例defrvs(s):--ifs==:----returns--else:----returnrvs(s[1:])+s[0]分析:当字符串长度为1或空时,反转之后仍是自己,利用这个特性可以将字符串s分为s[0]和s[1:],这两个字符串反转即为s[1:]s[0],根据该关系即可完成字符串翻转4.2斐波那契数列F(n)=F(n-1)+F(n-2)F(1)=F(2)=1deff(n):--ifn==1orn==2:----return1--else:----returnf(n-1)+f(n-2)分析:利用F(1)=F(2)=1和F(n)=F(n-1)+F(n-2),将F(n)递归到F(1)=F(2)=1求解
转载请注明:http://www.aierlanlan.com/cyrz/5883.html