Python 代码复用与函数递归
代码复用:把代码当成资源进行抽象
1、代码资源化:程序代码是一种用来表达计算的“资源”
2、代码抽象化:使用函数等方法对代码赋予更高级别的定义
3、代码复用:同一份代码在需要时可以被重复使用
代码复用:函数和对象是代码复用的两种主要形式
函数:将代码命名在代码层面建立了初步抽象
对象:属性和方法.和.()在函数之上再次组织进行抽象
模块化设计:分而治之
1、通过函数或对象封装将程序划分为模块及模块间的表达
2、具体包括:主函数、子函数、子程序之间的关系
3、分而治之:一种分而治之、分层抽象、体系化的设计思想
模块化设计:
紧耦合 松耦合
-
紧耦合:两个部分之间交流很多,无法独立存在
-
松耦合:两个部分之间交流较少,可以独立存在
模块内部紧耦合、模块之间松耦合
递归的定义:函数定义中调用函数自身的方式
递归的关键特征:
链条:计算过程存在递归链条
基例:存在一个或多个不需要再次递归的基例
类似于数学归纳法:
what is 数学归纳法呐?
数学归纳法:
1、证明当n取第一个值n0时命题成立
2、假设当nk时命题成立,证明当nk=nk+1时命题也成立
递归思想也是数学归纳法思维的编程体现
递归的实现:
函数+分支语句
1、递归本身是一个函数,需要函数定义方式描述
2、函数内部,采用分支语句对输入参数进行判断
3、基例和链条,分别编写对应的代码
实例一:阶乘
def fact(n):
if n==0:
return 1
else:
return n*fact(n-1)
实例二:字符串反转
将字符串s反转后输出>>>s[::-1]
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def rvs(s):
if s=="":
return s
else:
return rvs(s[1:])+s[0]
实例三:斐波那契数列:
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
实例四:汉诺塔
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
count=0
def hanoi(n,src,dst,mid):
global count
if n==1:
print("{}:{}->{}".format(1,src,dst))
count+=1
else:
hanoi(n-1,src,mid,dst)
print("{}:{}->{}".format(n,src,dst))
count+=1
hanoi(n-1,mid,dst,src)
hanoi(3,"A","C","B")
print(count)
运行结果如下图所示:
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16760785.html