递归函数

递归
在一个函数里面调用自己
默认递归最大限度为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)
View Code

 

posted on 2017-11-08 15:49  杨小天  阅读(93)  评论(0编辑  收藏  举报