函数及递归调用实例(递归翻转字符串和汉诺塔问题)

    技术2022-07-10  92

    函数

    可变参数传递

    例:求n的阶乘和某一些数的乘积

    def fact(n, *b): s = 1 for i in range(1, n + 1): s *= i for item in b: s *= item return s print(fact(10, 3, 5, 8))

    返回值

    return 可以返回多个结果, 也可以不返回结果

    def fact(n, m = 1): s = 1 for i in range(1, n + 1): s *= i return s // m, n, m a, b, c = fact(10, 5) print(a, b, c)

    局部变量与全局变量

    三个使用规则

    规则一:

    函数运算结束后,局部变量将被释放

    在函数内部使用全局变量,使用保留字global

    规则二:局部变量为组合数据类型切未创建,等同于全局变量

    注意:在函数中未被创建

    lambda函数

    谨慎使用lambda函数,推介使用def定义

    递归实例:字符串翻转

    #递归字符串翻转 def rvs(s): if s == "": return s else: return rvs(s[1:] + s[0])

    递归实例:汉诺塔问题

    #汉诺塔问题 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)
    Processed: 0.012, SQL: 9