数据结构 python语言描述 读书笔记1

数据结构 python语言描述 读书笔记

第1章 Python基础

模式匹配

# coding:utf-8
# 对集合使用模式匹配
rgbTuple = ((255, 0, 0), '#FF0000')
((r, g, b), hexString) = rgbTuple  # 模式匹配

递归

可以跟踪递归的过程,用来调试递归。

# coding:utf-8
def ourSum(lower, upper, margin=0):
    """
    page 18: 一种跟踪递归的办法.
    :param lower:
    :param upper:
    :param margin:
    :return:
    """
    blanks = ' ' * margin
    print(blanks+str(lower)+str(upper))
    if lower > upper:
        print(blanks+str(0))
        return 0
    else:
        result = lower + ourSum(lower + 1, upper,margin+4)
        print(blanks+str(result))
        return result



print(ourSum(1, 4))

# 14
#     24
#         34
#             44
#                 54
#                 0
#             4
#         7
#     9
# 10
# 10

嵌套

# coding:utf-8

# page 19

def factorial(n, product=1):
    if n == 1:
        return product
    else:
        return factorial(n-1, n * product)


# 递归求阶乘,输入n输出n!。函数不应该有参数product。
# 采用函数嵌套,将参数product隐藏在内部函数中。
def factorial_2(n):
    def recurse(n, product=1):
        if n == 1:
            return product
        else:
            return factorial(n - 1, n * product)
    return recurse(n)

# 书中该例子不恰当,阶乘可以很便捷的实现。书中是为了讲嵌套。
def factorial_3(n):
    if n == 1:
        return 1
    else:
        return n*factorial_3(n-1)

print(factorial(4))
print(factorial_2(4))
print(factorial_3(4))

但是这种嵌套,在某些地方很有用。(隐藏参数)
这种将返回值作为参数的递归,也很有用。

# coding:utf-8

# 实现十进制转二进制(r <= 10)并将二进制翻转;
# 比如: 6(110),输出,011
# 递归,将要返回的值作为参数;
# 函数嵌套,隐藏参数;
def dec2bin(dec_num):
    def recurse(dec_num, bin_num=''):
        if dec_num == 0:
            return bin_num
        else:
            return recurse(dec_num // 2, bin_num + str(dec_num%2))
    return recurse(dec_num)

print(dec2bin(6))

# 011

推广到r进制:

# coding:utf-8

# 实现十进制转r进制(r <= 10)并将r进制翻转;
# 比如: 6(二进制为110),输出,011
# 递归,将要返回的值作为参数;
# 函数嵌套,隐藏参数;
def dec2rBase(dec_num, base):
    def recurse(dec_num, base, bin_num=''):
        if dec_num == 0:
            return bin_num
        else:
            return recurse(dec_num // base, base, bin_num + str(dec_num%base))
    return recurse(dec_num, base)

print(dec2rBase(6, 3))

# 02

猜你喜欢

转载自blog.csdn.net/cluster1893/article/details/81627884