python限制递归次数(python最大公约数递归)

发布时间:2022-11-13

本文目录一览:

  1. python 为什么要进行递归限制
  2. 如何限制递归函数的次数
  3. 在python里递归最多达到多少次
  4. Python 实现递归
  5. python为什么不支持尾递归
  6. python函数高级

python 为什么要进行递归限制

因为递归的效率较低,如果不进行限制可能运行一个py文件会花费大量的时间

如何限制递归函数的次数

既然有次数限制,那就要传递限制数了

function add($a, $n=false){ //默认不限制次数
    if($n !== false && $n == 0) {
        return;
    } else {
        $n--;
    }
    if ($a < 99) {
        $a = $a + 2;
        echo $a.",";
        $a = add($a, $n);
    }
    return $a;
}

在python里递归最多达到多少次

这个要看你机器的配置和递归算法本身说需要的存储空间吧。递归是很占用寄存器空间的,如果你的寄存器空间足够大,哪递归多少次都无所谓。。。

Python 实现递归

一、使用递归的背景

先来看一个☝️接口结构: 这个孩子,他是一个列表,下面有6个元素 展开children下第一个元素[0]看看: 发现[0]除了包含一些字段信息,还包含了 children 这个字段(喜当爹),同时这个children下包含了2个元素: 展开他的第一个元素,不出所料,也含有children字段(人均有娃) 可以理解为children是个对象,他包含了一些属性,特别的是其中有一个属性与父级children是一模一样的,他包含父级children所有的属性。 比如每个children都包含了一个name字段,我们要拿到所有children里name字段的值,这时候就要用到递归啦~

二、find_children.py

拆分理解:

  1. 首先import requests库,用它请求并获取接口返回的数据
  2. 若children以上还有很多层级,可以缩小数据范围,定位到children的上一层级
  3. 来看看定义的函数 我们的函数调用:find_children(node_f, 'children') 其中:
  • node_f:json字段
  • children:递归对象 以下这段是实现递归的核心:
if items['children']:
  • items['children']不为None,表示该元素下的children字段还有子类数据值,此时满足if条件,可理解为 if 1
  • items['children']为None,表示该元素下children值为None,没有后续可递归值,此时不满足if条件,可理解为 if 0,不会再执行if下的语句(不会再递归)。 至此,每一层级中children的name以及下一层级children的name就都取出来了 希望到这里能帮助大家理解递归的思路,以后根据这个模板直接套用就行 (晚安啦~) 源码参考:

python为什么不支持尾递归

Python本身是不支持尾递归的(via),并且对递归次数有限制的,当递归次数超过1000次的时候,就会抛出“RuntimeError: maximum recursion depth exceeded”异常。

python函数高级

一、函数的定义

函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用函数名即可 特性:

  • 减少重复代码
  • 使程序变得可扩展
  • 使程序变得易维护

二、函数的参数

2.1、形参和实参数

  • 形参:调用时才会存在的值
  • 实参:实际存在的值

2.2、默认参数

定义:当不输入参数值会有一个默认的值,默认参数要放到最后

2.3、关键参数

定义:正常情况下,给函数传参数要按照顺序,不想按顺序可以用关键参数,只需要指定参数名即可(指定了参数名的就叫关键参数),但是要求是关键参数必须放在位置参数(以位置顺序确定对应的参数)之后

2.4、非固定参数

定义:如你的函数在传入参数时不确定需要传入多少个参数,就可以使用非固定参数

  • 通过元组形式传递
  • 通过列表形式传递
  • 字典形式(通过k,value的方式传递)
  • 通过变量的方式传递

三、函数的返回值

作用:

  • 返回函数执行结果,如果没有设置,默认返回None
  • 终止函数运行,函数遇到return终止函数

四、变量的作用域

全局变量和局部变量

  • 在函数中定义的变量叫局部变量,在程序中一开始定义的变量叫全局变量
  • 全局变量作用域整个程序,局部变量作用域是定义该变量的函数
  • 当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用,其他地方全局变量起作用
  • 同级的局部变量不能互相调用
  • 想要函数里边的变量设置成全局变量,可用global进行设置

五、特殊函数

5.1、嵌套函数

定义:嵌套函数顾名思义就是在函数里边再嵌套一层函数 提示:在嵌套函数里边调用变量是从里往外依次调用,意思就是如果需要调用的变量在当前层没有就会去外层去调用,依次内推

匿名函数

基于Lambda定义的函数格式为:lambda 参数:函数体

  • 参数,支持任意参数。
  • 匿名函数适用于简单的业务处理,可以快速并简单的创建函数。
  • 与三元运算结合

5.3、高阶函数

定义:变量可以指向函数,函数的参数可以接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称之为高阶函数 只需要满足以下任意一个条件,即是高阶函数:

  • 接收一个或多个函数作为输入
  • return返回另一个函数

5.4、递归函数

定义:一个函数可以调用其他函数,如果一个函数调用自己本身,这个函数就称为递归函数

  • 在默认情况下Python最多能递归1000次(这样设计是为了防止内存被撑死),可以通过sys.setrecursionlimit(1500)进行修改
  • 递归实现过程是先一层一层的进,然后在一层一层的出来
  • 必须有一个明确的条件结束,要不然就是一个死循环了
  • 每次进入更深层次,问题规模都应该有所减少
  • 递归执行效率不高,递归层次过多会导致栈溢出 示例:
  • 计算4的阶乘 4x3x2x1
  • 打印数字从1-100

5.5、闭包现象

定义:内层函数调用外层函数的变量,并且内层函数被返回到外边去了 闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域