其他分享
首页 > 其他分享> > 032 代码复用与函数递归

032 代码复用与函数递归

作者:互联网

目录


一、概述

二、代码复用与模块化设计

2.1 代码复用

把代码当成资源进行抽象

函数 和 对象 是代码复用的两种主要形式

函数:将代码命名

在代码层面建立了初步抽象

对象:属性和方法

<a>.<b> 和 <a>.<b>()

在函数之上再次组织进行抽象

2.2 模块化设计

分而治之

紧耦合 松耦合

三、函数递归的理解

3.1 递归的定义

函数定义中调用函数自身的方式

032-代码复用与函数递归-01.jpg?x-oss-process=style/watermark

3.2 递归的两个关键特征

3.3 类似数学归纳法

四、函数递归的调用过程

4.1 递归的实现


\[n!= \begin{cases} 1 & n=0 \\ n(n-1)! & \text{otherwise} \end{cases} \]


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

4.2 函数 + 分支语句

4.3 递归的调用过程

032-代码复用与函数递归-02.jpg?x-oss-process=style/watermark

五、函数递归实例解析

5.1 字符串反转

将字符串s反转后输出:s[::-1]

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

5.2 斐波那契数列

斐波那契数列


\[F(n)= \begin{cases} 1 & n=1 \\ 1 & n=1 \\ F(n-1)+F(n-2) & otherwise \end{cases} \]


\(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)

5.3 汉诺塔

032-代码复用与函数递归-03.jpg?x-oss-process=style/watermark

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)


count = 0
hanoi(3, 'A', 'B', 'C')
print(count)
1:A->B
2:A->C
1:B->C
3:A->B
1:C->A
2:C->B
1:A->B
7

六、单元小结

6.1 代码复用与函数递归

标签:函数,递归,基例,代码,复用,耦合,032
来源: https://blog.51cto.com/u_13804357/2709915