函数递归

python

函数递归

函数递归(爬虫用的比较多)

  - 指的是重复 "直接调用或间接调用" 函数本身,这是一种函数嵌套调用的表现形式

函数递归有两种调用方式:

  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 sys

sys.setrecursionlimit(1000) #括号内数字可手动修改深度值

  查看当前可以承受的递归深度(写一个递归函数,报错处即是):

num = 1

def func():

global num

print("from func", num)

num += 1

func()

func()

以上是 函数递归 的全部内容, 来源链接: utcz.com/z/531163.html

回到顶部