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)

运行结果如下图所示:
在这里插入图片描述

posted @ 2022-10-07 20:27  I'm_江河湖海  阅读(41)  评论(0编辑  收藏  举报