Python学习之路---递归函数

递归函数的定义:在一个函数体内,调用自身的函数。

def test():
    print('HELLO')
    test()   # 函数体内调用自身函数

以上代码:产生一个递归错误信息:涉及到递归函数的安全阈值,超出这个阈值就报错

def story():
    print("HELLO")
    story()

story()
# RecursionError: maximum recursion depth exceeded while calling a Python object
# 递归错误,超过了递归的最大深度,请勿改变这个安全阈值

可以修改这个安全阈值,但是不建议修改,因为会阈值越高,占用内存越大

# 测试最大深度
n = 0
def story():
    global n
    n += 1
    print(n)
    story()
story()

# 修改递归的最大深度
import sys
sys.setrecursionlimit(10000) # 设置递归的最大深度,值与PC硬件有关
n = 0
def story():
    global n
    n += 1
    print(n)
    story()
story()

既然不推荐修改递归的安全阈值,那么递归有什么作用呢?

# 递归的缺点: 占用内存,在调用递归函数的时候,会不停的在函数名内存空间里继续嵌套一个同名的内存空间
# 递归的优点: 简化代码,即会让代码变简单

那么在什么时候才会想到用递归函数呢?

# 当你求解一个问题的时候,但这个问题不能直接得到一个答案来求解,需要通过另外一个结果来求解,但另外一个结果获取答案的方式和开头时一样的

不理解?那么就看看实际的例子吧!

# 用递归函数实现 算出年龄
# alex 多大?
# alex 比 egon大两岁
# egon 多大? 
# egon比wusir大两岁 
# wusir 多大?
# wusir 比金老板大两岁
# 金老板多大? 
# 金老板40了

先看看笔者自己的思路,因为是也是初学,只能现学现用,也许思路不对,局限性大,仅供参考,有异议欢迎提出。

# 用递归实现以下功能
# alex 多大?   alex = ? 
# alex 比 egon大两岁  alex = egon+2
# egon 多大?  egon = ?  
# egon比wusir大两岁 egon = wusir + 2
# wusir 多大?  wusir = ?
# wusir 比金老板大两岁 wusir = 金老板 + 2
# 金老板多大? 金老板 = ?
# 金老板40了  金老板 = 40

# 我自己的思路
def age(name):
    king = 40
    if name == 'king':
        return king
    elif name == 'wusir':
        return king + 2
    elif name == 'egon':
        return age('wusir') + 2
    elif name == 'alex':
        return age('egon') + 2

who = input("你要查谁的年龄 alex的?egon的? wusir的?还是king的?")
who_age = age(who)
print(who,'的年龄是',who_age)
print(age('alex'))
print(age('egon'))
print(age('wusir'))
print(age('king'))

呵呵,写的不咋滴吧!那么就看看我看视频后的,虽然不是自己写的,但是我加上了自己的理解。(教你如何看懂递归函数)

# 视频答案解说
# 用递归实现以下功能
# alex 多大?    第一次问 x=1
# alex 比 egon大两岁  age(1) = age(2)+2 = age(x+1)+2
# egon 多大?   第二次问 x=2
# egon比wusir大两岁   age(2) = age(3)+2 = age(x+1)+2
# wusir 多大?   第三次问 x=3
# wusir 比金老板大两岁  age(3) = age(4)+2 = age(x+1)+2
# 金老板多大? 第四次问 x=4
# 金老板40了  age(4)=40
# 解析: 递和归
    # 递:将问题一个一个往下传递,直到获得最终答案
    # 归:将最终答案一个一个往上回归,直到回归到最初的问题中
#定义函数
def age(x):
    if x == 4:
        return 40
    elif x>0 and x<4:
        return age(x+1)+2

print(age(1))

# 代码解析:
# 当age(1)时 开始调用函数
def age(1):
    if 1 == 4:
        return 40
    elif 1>0 and 1 < 4:
        return age(1+1)+2  # 先执行1+1 = 2 然后age(2)就开始调用函数age(),+2起到任何作用,此时x=2 回归:age(1) = age(2)+1

def age(2):
    if 2 == 4:
        return 40
    elif 2>0 and 2 < 4:
        return age(2+1)+2  # 先执行2+1 = 3然后age(3)就开始调用函数age(),+2起到任何作用,此时x=3 回归:age(2) = age(3)+2

def age(3):
    if 3 == 4:
        return 40
    elif 3>0 and 3 < 4:
        return age(3+1)+2  # 先执行3+1 = 2 然后age(4)就开始调用函数age(),+2起到任何作用,此时x=4  回归:age(3)=age(4)+2

def age(4):
    if 4 ==4:
        return 40  # 条件成立 返回一个值为 40 ,即age(4) = 40, 将age(4)=40 一个一个往上回归

递归函数,对递归两个字的解析

# 解析: 递和归
    # 递:将问题一个一个往下传递,直到获得最终答案
    # 归:将最终答案一个一个往上回归,直到回归到最初的问题中

猜你喜欢

转载自blog.csdn.net/chengyinman0078/article/details/87907905