初识递归

初识递归

内容:

①什么是递归

②初识递归

③算法——二分查找法

④三级菜单——递归实现

 

一:概念

在函数中调用自身函数;

◆最大递归深度是997或者998 ,这是python从内存角度出发做的限制

◆修改最大深度:

import sys
 print(sys.setrecursionlimit(100000))

 

◆如果递归次数太多,则不太适合用递归来解决问题

◆优点:让代码更简单

◆缺点:占内存

def age(n):
    if n == 4:
        return 40
    elif n > 0 and n < 4:
        return age(n+1) + 2
print(age(1))
栗子:求年龄

二:算法:经典算法,查找,排序,最短路径

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def find(l,aim,start = 0,end = None):
    end = len(l) if end is None else end
    mid_index = (end - start)//2 + start
    if start <= end:
        if l[mid_index] < aim:
            return find(l,aim,start=mid_index + 1,end=end)
        elif l[mid_index] > aim:
            return find(l,aim,start=start,end=mid_index-1)
        else:
            return mid_index
      else:
        return 'sorry,你要找的不在这儿'
ret = find(l,66)
print(ret)
二分查找法:必须处理有序的列表

 

def factorial(n):
    if n == 1:
        return 1
    else:
        return n*factorial(n-1)
num = int(input('请输入数字:'))
print(factorial(num))
栗子:递归实现阶乘

 

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

 

posted @ 2019-03-12 22:02  红领巾***  阅读(114)  评论(0编辑  收藏  举报