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)) 

 

posted @ 2020-05-08 17:58  静静别跑  阅读(293)  评论(0编辑  收藏  举报