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

    递归函数

    递归
    在一个函数里面调用自己
    默认递归最大限度为1000
    不要修改默认的递归最大限度
    往往递归都是和循环挂在一起的
    人理解循环,神理解递归
    算法,递归函数

    复制代码
    def story():
        print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?')
    
    while True:
        story()
    
    def story():
        print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?')
        story()
    
    story()
    复制代码

    功能解耦
    为什么要有函数:提高代码可读性,避免重复的代码,提高代码的复用性
    在函数中能return的不要print

    import sys
    print(sys.getrecursionlimit())  # 默认最大递归深度1000
    sys.setrecursionlimit(1000)  # 修改最大递归深度

    alex多大了,我告诉你alex比egon大两岁
    egon多大了,我告诉你egon比wusir大两岁
    wusir多大了,我告诉你,wusir比金鑫大两岁
    金鑫40了

    复制代码
    # def age(n):
    #     if n == 4:
    #         return 40
    #     return age(n+1) + 2
    
    def age(n):
        if n != 1:
            return age(n-1) + 2
        else:
            return 40
    print(age(4))
    复制代码

    二分查找算法

    复制代码
    # 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?
    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_2(l,aim,start=0,end=None):
        if end == None:  # 解决参数太多
            end = len(l) - 1
        if start <= end:  # 解决要找的值找不到的问题
            mid = (end-start)//2 +start
            if l[mid] > aim:
                return find_2(l,aim,start,mid-1)  # 解决返回值的问题
            elif l[mid] < aim:
                return find_2(l,aim,mid+1,end)  # 解决返回值的问题
            else:
                return aim,mid  # 解决返回值的问题   
        else:
            print('找不到这个值')  
    
    print(find_2(l,16))
    复制代码

    阶乘的计算

    # 什么叫阶乘 7*6*5*4*3*2*1
    def f(n):
        if n == 1:
            return 1
        return n*f(n-1)
    print(f(7))

    斐波那契数列

    # 1,1,2,3,5,8,13...
    def f(n):
        if n == 1 or n== 2:
            return 1
        return f(n-1)+f(n-2)
    print(f(10))

    三级菜单

    复制代码
    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    
    def menu_3(menu):
        while True:
            for key in menu:
                print(key)
            choice = input('选择:')  # b返回上一级,q退出
            if choice == 'q' or choice == 'b':
                return choice
            elif choice in menu and menu[choice]:
                borq =  menu_3(menu[choice])
                if borq == 'q':
                    return 'q'
            else:
                print('到底了')
    
    menu_3(menu)
  • 相关阅读:
    python 面向对象编程的三大特征之一 多态
    python 访问控制
    python 面向对象编程的三大特征之一 继承
    朱兆祺教你如何攻破C语言学习、笔试与机试的难点
    如何画好流程图
    2013年个人计划
    30天敏捷结果(1):总体认识Getting Result敏捷方法
    每天一个linux命令目录
    国嵌C语言学习
    【head first python】1.初识python 人人都爱列表
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7826465.html
Copyright © 2011-2022 走看看