Python基础之初识递归

初识递归

递归的定义:

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

递归的最大深度--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)

 

posted @ 2017-07-31 20:29  Justin067  阅读(247)  评论(0编辑  收藏  举报
TOP