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

    一.递归的定义

    在一个函数里面再调用这个函数本身

    递归特性

    1.必须有一个明确的结束条件

    2.每次进入更深一层递归时,问题规模相比于上一次的递归有所减少



    二.递归的应用

    1.递归函数与三层菜单

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

    2.二分法查找

    li=[1,3,5,6,8,12,14,16,19,24,26,29,33,39,46,67,78,89]
    def find(li,num,start=0,end=len(li)-1):
        mid=(start+end)//2
        if not li[start:end+1]:
            return
        elif li[mid]>num:
            return find(li,num,start,mid-1)
        elif li[mid]<num:
            return find(li,num,mid+1,end)
        elif li[mid]==num:
            return mid
    index=find(li,29)
    print(index)

    升级版二分法

    def func(l, aim,start = 0,end = len(l)-1 ):
        mid = (start+end)//2
        if not l[start:end+1]:
            return
        elif aim > l[mid]:
            return func(l,aim,mid+1,end)
        elif aim < l[mid]:
            return func(l,aim,start,mid-1)
        elif aim == l[mid]:
            print("bingo")
            return mid
    
    index = func(l,68)
    print(index)
    有一种能力,是持续不断的努力
  • 相关阅读:
    dota监測
    C++ new malloc realloc
    LeetCode240:Search a 2D Matrix II
    Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4
    怎样在Linux下使用Markdown进行文档工作
    用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
    jQuery事件对象
    asp.net 获取系统的根目录
    C语言中将数字转换为字符串的方法
    ubuntu 12.04 64位设置兼容32位的实现
  • 原文地址:https://www.cnblogs.com/shaojiafeng/p/7265457.html
Copyright © 2011-2022 走看看