zoukankan      html  css  js  c++  java
  • 初识递归

    初识递归

    内容:

    ①什么是递归

    ②初识递归

    ③算法——二分查找法

    ④三级菜单——递归实现

    一:概念

    在函数中调用自身函数;

    ◆最大递归深度是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)
    栗子:三级菜单
  • 相关阅读:
    dotnet命令(一)
    Vue两种组件类型介绍:递归组件和动态组件
    vue computed计算属性和watch监听属性解疑答惑
    页面加载完成后加载多个函数的js完美解决方案
    js 获取样式兼容方法
    带回调函数的js运动框架
    使用ajax预加载图片
    css居中解决方案
    图片自适应屏幕解决方案
    js 监听输入框输入事件兼容ie7
  • 原文地址:https://www.cnblogs.com/twinkle-/p/10519995.html
Copyright © 2011-2022 走看看