day16 递归函数

一、递归 函数

   为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性

     在函数中能用return的不要print

1、递归的最大深度997

def foo(n):
    print(n)
    n+=1
    foo(n)
foo(1)
递归的最大深度

2、修改递归的最大深度

    由此我们可以看出,未报错之前能看到的最大数字就是997.

 当然了,997是python为了我们程序的内存优化所设定的一个默认值,

 我们当然还可以通过一些手段去修改它:

import sys
sys.setrecursionlimit(2000)
n=0
def func():
    global n
    n+=1
    print(n)
    func()
func()
# 1997
修改递归的最大深度

 3、递归的例子

例一:

现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。

你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。

你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。

那你问金鑫,金鑫告诉你,他40了。。。

这个时候你是不是就知道了?alex多大

def age(n):
    if n==4:
        return 40
    else:
        return age(n+1)+2
print(age(1))
#46
年龄的递归

详细解析步骤:

4、总结:

   在一个函数里面调用自己,默认的递归最大限度是1000(不要修改递归的最大限度)

   往往递归都是和循环挂在一起的,人理解循环,神理解递归

 二、二分查找算法

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:
            ret=find_2(l,aim,start,mid-1)
            return ret
        elif l[mid]<aim:
            ret=find_2(l,aim,mid+1,end)
            return ret
        else:
            return aim,mid
    else:
        print("找不到这个值")
l=[2,3,4,5,6,7,8,9,10,11,12,13,14,15]
print(find_2(l,6))
二分查找算法

 

例题:

1、阶乘的算法 4*3*2*1

def f(n):  
    if n==1:
        return 1
    else:
        return n*f(n-1)
print(f(4))
阶乘的算法

2、斐波那契数列

# 1,1,2,3,4,5,8,13...
# n=10
def fib(n):
    if n==1 or n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
print(fib(10))
斐波那契数列

3、三级菜单:

menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'sogo':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '汇德商厦老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{
             '朝阳大妈' },
        '东城':{},
    },
    '上海':{
        '闵行':{
            "人民广场":{
                '炸鸡店':{}
            }
        },
        '闸北':{
            '火车战':{
                '携程':{}
            }
        },
        '浦东':{},
    },
    '山东':{
        '高丽':{}
    },
    }
def meu_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]:
            borq=meu_3(menu[choice])
            if borq=="q":
                return "q"
meu_3(menu)

  

原文地址:https://www.cnblogs.com/number1994/p/7995111.html