码迷,mamicode.com
首页 > 编程语言 > 详细

python 递归

时间:2017-09-06 16:20:24      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:==   问题:   问题   返回值   斐波那契   三级菜单   ret   循环   sch   

迭代是人,递归是神。    —— L.Peter Deutsch

定义:函数在执行的过程中调用自己。

 

递归算法一般用于解决三类问题:

  1 数据的另一是按照递归定义的。比如斐波那契函数

  2 问题解法按照递归算法实现。比如回溯。

  3 数据的数据类型是按照递归定义的。比如树的遍历,图的搜索。

 

递归的应用

  三级菜单  

  

menu = {
    ‘北京‘: {
        ‘海淀‘: {
            ‘五道口‘: {
                ‘soho‘: {},
                ‘网易‘: {},
                ‘google‘: {}
            },
            ‘中关村‘: {
                ‘爱奇艺‘: {},
                ‘汽车之家‘: {},
                ‘youku‘: {},
            },
            ‘上地‘: {
                ‘百度‘: {},
            },
        },
        ‘昌平‘: {
            ‘沙河‘: {
                ‘老男孩‘: {},
                ‘北航‘: {},
            },
            ‘天通苑‘: {},
            ‘回龙观‘: {},
        },
        ‘朝阳‘: {},
        ‘东城‘: {},
    },
    ‘上海‘: {
        ‘闵行‘: {
            "人民广场": {
                ‘炸鸡店‘: {}
            }
        },
        ‘闸北‘: {
            ‘火车战‘: {
                ‘携程‘: {}
            }
        },
        ‘浦东‘: {},
    },
    ‘山东‘: {},
}

 

# n=0
def foo(dic):
    while True:
        for key in dic:
            print(key)
        cmd=input(‘==>‘)
        if cmd==‘b‘:
            break
        elif cmd==‘q‘:
            return ‘q‘
        elif cmd in dic:
            res=foo(dic[cmd])       
            # global n
            # n+=1
            # print(‘第{}次:‘.format(n),res)
            if res==‘q‘:                                #res 是取下一级的返回值,只有cmd==‘q‘,才有返回值‘q’。注释掉的代码试了一下,break退出一层循环是res是None。用return实现了输入q,每一层都退出了。
return ‘q‘ #这两行代码我觉的是精髓。 foo(menu)

  实现了一级一级打印,按 b 返回上一级,按 q 直接退出。

python 递归

标签:==   问题:   问题   返回值   斐波那契   三级菜单   ret   循环   sch   

原文地址:http://www.cnblogs.com/654321cc/p/7485360.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!