函数递归
函数递归
函数递归(爬虫用的比较多)
- 指的是重复 "直接调用或间接调用" 函数本身,这是一种函数嵌套调用的表现形式
函数递归有两种调用方式:
1、直接调用:在函数内置,直接调用函数本身
# 直接调用num = 1
def func():
global num
print("from func", num)
num += 1
func()
func()
2、间接调用:两个函数之间相互调用简介造成递归
# 间接调用def foo():
print("from goo")
goo()
def goo():
print("from goo")
foo()
foo()
# 单纯的递归是没有意义的
若递归有意义,必须遵循两个条件:
1、回溯:
指的是重复地执行,每一次执行都要拿到一个更接近于结果的结果,回溯必须要有一个终止条件。
2、递推:
当回溯找到一个终止条件后,开始一步一步往上递推
例:第一个人年龄为18,第二个人年龄比第一个人大2岁,第二个人比第二个人大2岁,求第五个人多少岁
"""例:第一个人年龄为18,第二个人年龄比第一个人大2岁,第二个人比第二个人大2岁,求第五个人多少岁
age5 == age4 + 2
age4 == age3 + 2
age3 == age2 + 2
age2 == age1 + 2
age1 == 18 # ★回溯终止的结果
# age(n) = age(n - 1) + 2
"""# 定义一个函数age,变量n为第几个人
def age(n):
# 当n=1时,返回一个值18:“回溯”到第一个人时,第一个人年龄为18。 ★此处为程序结束的终止点
if n == 1:
return 18
# 返回前一个人的年龄,传递给age()函数,继续向前“回溯”,即继续执行程序
return age(n - 1) + 2
res = age(5)
print(res)
图解:
递归深度
相关知识(了解):
python中有默认的递归深度:998
函数递归在重复调用函数的过程中,会形成死循环,python为了节省资源,防止系统资源使用过度导致死机,所以对递归深度进行限制。但深度可以修改,见下文。
ps:每一台操作系统中都会根据硬件来设置默认递归深度
获取递归深度:
import sys # 获取操作系统资源的模块print(sys.getrecursionlimit())
设置递归深度:
import syssys.setrecursionlimit(
1000) #括号内数字可手动修改深度值
查看当前可以承受的递归深度(写一个递归函数,报错处即是):
num = 1def func():
global num
print("from func", num)
num += 1
func()
func()
以上是 函数递归 的全部内容, 来源链接: utcz.com/z/531163.html