码迷,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
迷上了代码!