递归函数

递归函数

一、什么是递归函数?

简单来说,递归函数就是在函数内部调用自己,每调用一次就完成一次循环,直到达到最大递归层数或者用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)
二分法

四、总结:

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

原文地址:https://www.cnblogs.com/hzauq/p/7269554.html