您的位置:首页 > 编程语言 > Python开发

Python基础之初识递归

2017-07-31 20:29 363 查看

初识递归

递归的定义:

在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。

递归的最大深度--997

递归函数不受外力的阻止会一直执行下去,python为了杜绝此类现象,强制将递归层数控制在997层。

如下为测试python遇到此类情况强制停止的现象

def foo(n):
print(n)
n += 1
foo(n)
FOO(1)
#以上为死循环,python会一直执行997次后便提醒用户


以上手段为python为了让用户程序的内存优化所设定的一个默认值,我们也可以自定义它:

import sys
print(sys.setrecursionlimit(10000))
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
#以上设定的是10000次,但是笔者的电脑只能递归3219次,便停止了,取决于电脑性能。


再谈递归

假设有一个求年龄的需求,大体如下:

现在你们问我,Alex多大了?我说我不告诉你,但Alex比 Egon 大两岁。

你想知道Alex多大,你是不是还得去问Egon?Egon说,我也不告诉你,但我比Eva大两岁。

你又问Eva,Eva也不告诉你,她说她比Jack大两岁。

那你问Jack,Jack告诉你,他40了。。。

通过挨个询问,这时候你已经知道Alex的年龄了。我们具体分析以下,这几个人之间的规律。





像这种情况,我们用函数应该怎么快速的求Alex的年龄呢?

def age(n):
if n == 1:
return 40
else:
return age(n-1)+2

print(age(4))


递归函数与三级菜单

menu = {
'北京': {
'海淀': { },
'昌平': { },
'朝阳': { },
'东城': { },
},
'上海': {
'闵行',
'闸北',
},
}

def threeLM(dic):
while True:
for k in dic:print(k)
key = input('input>>').strip()
if key == 'b' or key == 'q':return key
elif key in dic.keys() and dic[key]:
ret = threeLM(dic[key])
if ret == 'q': return 'q'
elif (not dic.get(key)) or (not dic[key]) :
continue

threeLM(menu)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: