zoukankan      html  css  js  c++  java
  • 递归函数

    递归函数

    一、什么是递归函数?

    简单来说,递归函数就是在函数内部调用自己,每调用一次就完成一次循环,直到达到最大递归层数或者用return结束递归函数。一般来说,在python中最大递归层数是有限制的。

    二、测试递归最大深度。

    def foo(n):
        print(n)
        n += 1
        foo(n)
    foo(1)

    三、递归函数的实际应用

    1、递归函数实现三级菜单:

    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    菜单
    def func(menu):
          while True:
               for k in menu:
                    print(k)
               name=input('>>>').strip()
               if name=='q' or name=='b':
                     return name
               elif name in menu.keys() and menu[name]:
                     ret=func(menu[name])
                     if ret=='q':
                          return 'q'
               elif (not menu.get(name)) or(not menu[name]):
                     continue
    func(menu)
    三级菜单

    2、二分法:

    l = [2,3,5,10,15,16,18,22,26,30,32,55,56,66,67,69,72,76,82,83,88]
    View Code
    l = [2,3,5,10,15,16,18,22,26,30,32,55,56,66,67,69,72,76,82,83,88]
    def aa(l,aim,start=0,end=len(l)-1:
         mid=(start+end)//2
         if start<=end:
              if aim<l[mid]:
                   end=mid-1
               return aa(l,aim,start,end)
              elif aim>l[mid]:
                   start=mid+1
                return aa(l,aim,start,end) 
               else:
                    print('bingo!')
                    return mid
         else:
               return '找不到?'
    ret=aa()
    print(ret)
    二分法

    四、总结:

    暂时就这些了,总之,人理解循环,神理解递归。递归的本质就是在函数内部调用自身。

  • 相关阅读:
    spring boot 中@Mapper和@Repository的区别
    yarn和npm的对比以及yarn的使用
    vue环境搭建
    小白的springboot之路(六)、跨域解决方案CORS
    DWR3.0框架入门(1) —— 实现ajax
    DWR3.0框架入门(3) —— ScriptSession的维护及优化
    DWR3.0框架入门(2) —— DWR的服务器推送
    Freemarker入门案例
    dom4j生成和解析xml文件
    struts2拦截器-自定义拦截器,放行某些方法(web.xml配置)
  • 原文地址:https://www.cnblogs.com/hzauq/p/7269554.html
Copyright © 2011-2022 走看看