
递归函数

定义
在函数内调用当前函数本身的函数就是递归函数
递归函数的优缺点
优点:定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
缺点:使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出
使用例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| # 假如街上有这么一群人,我想问知道长沙的小吃街在哪。其中只有狗菲(大吃货)知道在哪。 names=["我","刘二","张三","李四","狗菲","王五"] # 问路 def ask_way(lis): # 街上就我一个人的情况下 if len(lis)==1: return "没有人知道这个地方在哪。" # 街上不只我一个人的情况下,先问第一个人 name=lis.pop(0) # 如果这个人是狗菲,那么问到路,递归结束 if name=="狗菲": return "狗菲说:长沙的小吃街在天心区南门口!!" # 如果这个人不知道路,就去问下一个人,下一个人就好把结果告诉这个人。 print("<%s>问:你[%s]好,请问你知道长沙的小吃街在哪吗?" % (name, lis[0])) print("不好意思,我帮您问一下%s,他可能会知道!!\n"%lis[0]) res=ask_way(lis) if name != "我": print("<%s>说:%s" % (name, res)) return res
ask_way(names)
# 输出结果为: """ <我>问:你[刘二]好,请问你知道长沙的小吃街在哪吗? 不好意思,我帮您问一下刘二,他可能会知道!!
<刘二>问:你[张三]好,请问你知道长沙的小吃街在哪吗? 不好意思,我帮您问一下张三,他可能会知道!!
<张三>问:你[李四]好,请问你知道长沙的小吃街在哪吗? 不好意思,我帮您问一下李四,他可能会知道!!
<李四>问:你[狗菲]好,请问你知道长沙的小吃街在哪吗? 不好意思,我帮您问一下狗菲,他可能会知道!!
<李四>说:狗菲说:长沙的小吃街在天心区南门口!! <张三>说:狗菲说:长沙的小吃街在天心区南门口!! <刘二>说:狗菲说:长沙的小吃街在天心区南门口!!
狗菲说:长沙的小吃街在天心区南门口!! """
|

函数文档

定义
是用来查看函数相关信息及参数使用的一个文档
查看函数文档
1 2 3 4 5 6 7 8 9 10 11 12
| # 查看函数文档 """ help(函数名) 此方法会直接输出函数文档的内容
函数名.__doc__ 直接输出显示函数文档的内容元字符串(可以使用print(函数名.__doc__)来解决无格式问题)
"""
help(print) print(print.__doc__)
|
编写函数文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # 编写函数文档 """ def 函数名(): """ # 编写函数文档 """
"""
def eat(): """ this is eat function document """ pass
print(eat.__doc__)
|
参考
“https://www.cnblogs.com/littlefivebolg/articles/9113918.html”
