函数递归

函数递归

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

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

 

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

  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()

posted @ 2020-10-13 20:39  chchcharlie、  阅读(254)  评论(0编辑  收藏  举报