递归函 数

递归函数


什么递归函数?
递归函数就是直接或者间接调用自身,递归的本质是循环,递归能解决的问题循环也能解决。
递归的间隔阶段:

  • 回溯:一层一层往下嵌套,也就是不断的调用自身,只到触发结束条件;
  • 递推:当触发结束条件时,一层一层往回推。
# 直接调用自己
def func():
    print("直接调用自身")
    func()
func()

# 间接调用自己
def func1():
    print("间接调用自己")
    func2()

def func2():
    func1()
func1()

像上面的两种递归情况都会形成死循环,并且每一次调用自己都会开辟一个局部名称空间,递归函数是自身套自身第一次调用等待第二次调用结束才会结束、第二次调用等第三次调用结束、第三次调用等待第四次调用结束。。。这样就会导致前面的调用永远不会结束,也就是前面开辟的名称空间也永远不会关闭,这样由于调用次数达到相当大是会发生内存崩溃导致电脑卡死,使用python是、系统设置了一个递归深度,当递归次数等于递归深度时报错(RecursionError: maximum recursion depth exceeded while calling a Python object)结束这次递归调用。因此一般写递归函数都应该包含结束条件。
获取递归深度和改变递归深度

import sys
# 用getrecursionlimit回去递归深度
print(sys.getrecursionlimit())

# 用 setrecursionlimit更改递归深度,不建议更改
sys.setrecursionlimit(1001)

递归小例:
打印列表中的元素:
例:l = [1,2,[2,3,[3,4,[4,5,[5,6,[6,7,[7,8,[8,9,[9,10]]]]]]]]]
打印结果:1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,9,10

l = [1,2,[2,3,[3,4,[4,5,[5,6,[6,7,[7,8,[8,9,[9,10]]]]]]]]]
def func(list1):
    for i in list1:
        if isinstance(i,list):
            func(i)
        else:
            print(i,end='\t')
func(l) # 1	2	2	3	3	4	4	5	5	6	6	7	7	8	8	9	9	10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童话的python之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值