Python——第四章:函数的递归调用

递归:  函数自己调用自己

递归如果没有任何东西拦截的话. 它默认就是一个死循环

def func()
    func()
    
func()

因此递归调用的时候需要有判断,来退出循环

def func()
    if xxxxx:
        return
    func()
    
func()

这里就用到了return来充当循环中的break作用。

如果执意要进行递归调用,还没有判断的话,真实调用的最后会出现报错

def func():
    print(123)
    func()

func()

#运行结果,最后部分
123
123
123
123
123
123
Traceback (most recent call last):
  File "D:\Python\递归.py", line 5, in <module>
    func()
  File "D:\Python\递归.py", line 3, in func
    func()
  File "D:\Python\递归.py", line 3, in func
    func()
  File "D:\Python\递归.py", line 3, in func
    func()
  [Previous line repeated 994 more times]
  File "D:\Python\递归.py", line 2, in func
    print(123)
RecursionError: maximum recursion depth exceeded while calling a Python object    #最大递归深度调用python的对象

每次函数在调用的时候都会划分出局部作用域,因此递归调用是有系统默认最大值的。

 

python默认是有递归深度的限制的。默认的最大递归深度是1000,但是永远不能达到1000,我们也可以调整递归最大深度,但是也永远不能达到设置的那个值

import sys

print(sys.getrecursionlimit())
sys.setrecursionlimit(2000)

如果你的代码递归次数到达了最大深度1000,那你的算法基本上就有问题了,一定要重视,要调整你的代码。

循环可能是你更好的出路。

posted @ 2023-11-30 16:52  Magiclala  阅读(20)  评论(0编辑  收藏  举报