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

    递归
    一个函数在内部调用自己的函数称为递归,递归的次数在python是有限制的,默认递归次数是997/998次
    import sys
    sys.setrecursionlimit(20000000)
    count = 0
    def func():
        global count
        count += 1
        print(count)
        func()
    func()
    修改默认递归次数的方法:
    import syssys.setrecursionlimit(想要修改的数)
    def age(n):#写递归函数必须要有结束条件

    例子:
    1、alex年龄实例:alex比*大2岁,*比**大2岁,**比***大2岁,***40岁
    def age(n)    
      if n == 4: return 40 return age(n+1)+2 print(age(1)) # age(1)>>>age(2)+2>>>age(3)+2+2>>>age(4)+2+2+2>>>46
    
    
    
    
    分解:
    def
    age(1): if 1 == 4: return 40 return age(2)+2 #46 def age(2): if 2 == 4: return 40 return age(3)+2 # 44 def age(3): if 3 == 4: return 40 return age(4)+2 #return 42 def age(4): if 4 == 4: return 40 # age(n+1)+2
     
    2、数字n阶乘实例
    3的阶乘 3*2*1
    def func(n):
        if n == 1:
            return 1 # 结束
        else:
            return n*func(n-1)
    print(func(3))
    
    
    分解:
    def func(3): if 3 == 1: return 1 # else: return 3*func(2) print(func(3)) def func(2): if 2 == 1: return 1 # else: return 2*func(1) def func(1): if 1 == 1: return 1 #
    
    

    3、输出斐波那契第n个数

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

    4、二分查找算法

    def find_2(l,aim,start=0,end=None):# 定义默认参数,是为了参数少写
    #为什么不直接写 end=len(1)-1,函数我们先写了,当列表放下面,会提示l没有定义的报错,
    #使函数更加方便使用
        if end == None:end = len(l) - 1  #start = 0,end = 24
        if start <= end:  # 为了(避免出现开始值与结束值轮流换,一直循环
            mid = (end-start) // 2  + start  #mid = 12
            if aim < l[mid]:                #aim 目标数
                find_2(l,aim,start,mid-1)
            elif aim > l[mid]:              #目标数大于中间数,就切到右边的新列表
                find_2(l,aim,mid+1,end)     #f
            else:  # 等于的话就直接打印
                print(aim,mid)
        else:
            print('找不到这个值')
    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]
    find_2(l,15)

    5、三级菜单

    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    
    
    def menu_3(menu):
        while True:
            for key in menu:
                print(key)
            choice = input('选择:')
            if choice == 'q' or choice == 'b':
                return choice
            elif choice in menu and menu[choice]:  #  menu[choice] 保证字典不是空字典
                borq = menu_3(menu[choice])    #menu_3(menu[choice])重新调用menu_3,接收下级返回值borq
                if borq == 'q':            # 选择b什么都不做,就重新返回循环,实现返回上一级菜单
                    return 'q'
            else:print('已到尾')
    menu_3(menu)
     
     
  • 相关阅读:
    Gym 102040B Counting Inversion(超级数位dp)
    Educational Codeforces Round 104 (Rated for Div. 2)(A~D)
    2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)_组队训练
    线段树板子
    Codeforces Round #700 (Div. 2)
    Codeforces Round #699 (Div. 2)
    Codeforces Round #698 (Div. 2)
    字典树——实现字符串前缀查找(可返回字符串)
    LeetCode146-LRU缓存机制
    用到过的git命令
  • 原文地址:https://www.cnblogs.com/jassin-du/p/7805625.html
Copyright © 2011-2022 走看看