• python系列--函数--递归函数


    在一个函数里面 调用自己
    默认的递归最大限度 1000
    修改最大限度:

    import sys
    sys.setrecursionlimit(num)

    最好不要修改默认的递归最大限度

    def story()
        print('aaa')
        story()
        print('bbb')     #永远不会执行到这一步
    story()

    -----------
    例子:A比B大2岁,B比C大2岁,C比D大2岁,D 10岁,求A的岁数

    def age(n):
        if n == 1:
            return 10
        return age(n - 1) + 2
    print(age(4))
    #16

    -------------

    例子:求4!

    def jie(n):
        if n == 1:
            return 1
        return n*jie(n - 1)
    print(jie(4))
    #24

    ---------------

    例子:斐波那契数列 1,1,2,3,5,8,13,21,34.....

    def fib(n):
        if n == 1 or n == 2:
            return 1
        return fib(n - 1) + fib(n - 2)
    print(fib(6))
    #8

    -------------------------

    二分查找算法

    例子:求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 serch(l,num,start = 0,end = None):
        if not end:
            end = len(l) - 1
        mid = (end - start) // 2 + start
        if start > end:
            return "找不到"
        elif num > l[mid]:
            return serch(l,num,mid + 1,end)
        elif num < l[mid]:
            return serch(l,num,start,mid - 1)
        elif num == l[mid]:
            return num,mid
    print(serch(l,66))
    #(66,17)

    -------------------

    例子:三级菜单

    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }

    -

    def three(dic):
        while True:
            for key in dic:
                print(key)
            choice = input("输入:")
            if choice == 'q' or choice == 'b':
                return choice
            elif choice in dic.keys() and dic[choice]:
                ret = three(dic[choice])
                if ret == 'q':                                  #关键点:如果返回值不能继续往上传递,只能返回上一级函数
                    return 'q'                      #能继续往上传递,那么就能一直返回到第一次调用的时候,结束整个函数
            elif (not dic.get(choice)) or (not dic[choice]):
                continue
    print(three(menu)) 
  • 相关阅读:
    [轉]Discuz!NT 数据库读写分离方案
    [轉]最流行的PHP MVC框架
    [轉]关于MS SQL的执行计划
    [轉]Oracle读写分离架构
    [轉]資料庫讀寫分離
    [轉]SQL Server 老是死锁,或提示进程已牺牲,怎麽解决
    [轉]让IIS支持解析json
    [轉]jquery.validate全攻略
    [轉]Flex判断对象的类型
    [轉]mssql 数据表修复方法
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/12852087.html
Copyright © 2020-2023  润新知