python 递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 递归相关的知识,希望对你有一定的参考价值。

迭代是人,递归是神。    —— 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 递归的主要内容,如果未能解决你的问题,请参考以下文章

Python函数

如何在自定义PyYAML构造函数中处理递归?

executePendingTransactions 的递归入口

nodejs常用代码片段

JavaScript 代码片段

48个值得掌握的JavaScript代码片段(上)