代码复用和函数递归 python

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34195441/article/details/88013988

1、代码复用      把代码当成资源进行抽象,函数 和 对象 是代码复用的两种主要形式

函数:将代码命名在代码层面建立了初步抽象

对象:属性和方法   <a>.<b>和<a>.<b>()在函数之上再次组织进行抽象

         函数   ——————————————————>    对象

                                               抽象级别

2、模块化设计

-紧耦合:两个部分之间交流很多,无法独立存在

-松耦合:两个部分之间交流较少,可以独立存在

-模块内部紧耦合,模块之间松耦合

3、函数的递归

(1)递归的定义 

-函数定义中调用函数自身的方法

-两个关键特征:链条:计算过程存在递归链条

                         基例:存在一个或多个不需要再次递归的基例

-类似数学归纳法    递归时数学归纳法思维的编程体现

证明当n取第一个值n_{0}时命题成立

假设当n_{k}时命题成立,证明当n=n_{k+1}时命题也成立

(2)递归的实现

例:n! 

n=0时,n! = 1

otherwise,n! = n(n-1)!

def fact(n):
    if n == 0:
        return 1
    else:
        return n*fact(n-1)

函数+分支语句

-递归本身是一个函数,需要函数定义方式描述

-函数内部,采用分支语句对输入参数进行判断

基例和链条,分别编写对应代码

(3)函数递归实例分析

-函数 + 分支结构、递归链条、递归基例

——字符串反转  将字符串s反转后输出

def rvs(s):
    if s =="":
        return s
    else:
        return rvs(s[1:])+s[0] 
或: >>>s[::-1]

——斐波那契数列  F(n)=F(n-1)+F(n-2)

def f(n):
    if n == 1 or n==2:
        return 1
    else:
        return f(n-1) + f(n-2)

——汉诺塔

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)

运行结果:

1:A->C
2:A->B
1:C->B
3:A->C
1:B->A
2:B->C
1:A->C
7

猜你喜欢

转载自blog.csdn.net/qq_34195441/article/details/88013988