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

函数

可变参数传递

例:求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)
全部评论

相关推荐

迷茫的大四🐶:都收获五个了,兄弟那还说啥,不用改了,去玩吧
点赞 评论 收藏
分享
10-29 22:30
吉林大学 Java
同专业学长学姐,去互联网大厂的起薪 15k+,去国企 IT 岗的也有 12k+,就连去中小厂的都基本 13k 起步😤 我投的传统行业技术岗,拼死拼活拿到 1Woffer,本来还挺开心,结果逛了圈牛客直接破防,同是校招生,行业差距怎么就这么大啊!
喵喵喵6_6:应该哪里不对吧,大厂都是20k以上的,10k那种对于985本的学生基本就是点击一下过了笔试就送的,我前两天刚拿了一个11k,笔试完第2天就打电话了,非科班。坏消息是c++岗开这么低真是刷新认知了
校招生月薪1W算什么水平
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务