我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python递归函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python递归函数

参考:
https://pythonspot.com/recursion/
https://www.python-course.eu/recursive_functions.php

一、递归函数两大要素 -- 终止条件和递归方程

1、递归方程,即递归调用的方法
递归通俗的说就是在函数内部自己调用自己,如何调用就是递归方程。
以以下的sum(n)求和函数递归实现方式为例,递归调用方式就是返回n+sum(n-1),这样sum(n)的计算方式就类似如下:
sum(n)=n+sum(n-1) #递归方程,以下为其展开
sum(n)=n+(n-1)+sum(n-2)
...
sum(n)=n+(n-1)+(n-2)+...+sum(1)

到这里递归循环就应该结束了,很自然的我们得到了递归循环的结束条件:n=0,此时的返回就不是0+sum(-1)了,直接返回0结束循环即可。

2、终止条件,即从哪里开始和结束
从哪里开始和结束要分情况,在上例中有明确的结束条件n=0,n>0则进入递归循环,其隐形的条件就是n不能小于0,因此其开始条件写个n>0即可。
而其他场景例如遍历B树这种,开始一定是根节点,结束时一定是叶子结点,那么只要开始处理下根节点的打印,之后递归循环子节点即可,因此初始返回值就是根节点相关,之后递归调用以便遍历子节点和后代节点们,终止条件就是找不到子节点。

二、递归函数示例:

#!/usr/bin/env python
def sum(list):
    sum = 0
    # Add every number in the list.
    for i in range(0, len(list)):
        sum = sum + list[i]     
    # Return the sum.
    return sum
print(sum([5,7,3,8,10]))
#!/usr/bin/env python
def sum(list):
   if len(list) == 1:
        return list[0]
   else:
        return list[0] + sum(list[1:])
print(sum([5,7,3,8,10]))

以上两个函数,第一个使用普通循环方式求和,第二个使用递归循环的方式求和,从效率来讲第一个更好,从逻辑上来讲递归函数更加清晰简洁。

三、递归的限制条件:
递归函数使用栈来存储函数调用,过多的递归会导致栈溢出,例如sum([一个超长的序列]),因此平时推荐使用简单循环即可,但是遇到需要进行多层循环或者根本不清楚循环层数的场景,递归就很有用了,只要确定了终止条件和递归方程就可以实现遍历。
在Python中递归超过1000此就会报出:“RuntimeError: maximum recursion depth exceeded”报错,因此递归也不是无限循环的,这个值也可以修改,你需要大致估算下你的递归次数,然后通过以下方式修改:
#!/usr/bin/env python
import sys
sys.setrecursionlimit(5000)
#阶乘实现示例:
def factorial(n): 
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
print factorial(3000)

 四、递归函数的使用场景:

一些场景下循环层次数未知,使用递归会非常简便,例如遍历xml文件节点的代码:
#coding=utf-8
from xml.dom.minidom import parse
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
root=parse('<xml文件名>').documentElement
#开始遍历节点
def iter_xmlNodes(node):
    if node == None:
        return
    if node.nodeType == node.ELEMENT_NODE: #只有ELEMENT_NODE类型的node才有遍历的必要
        print ("ELEMENT Node:%s" %(node))
        for child in node.childNodes:
            iter_xmlNodes(child)
    else:
        print ("Node:%s, NodeType:%d" %(node,node.nodeType))
#对于前两个if,第一个if表示终止条件,第二个if表示对输入节点的处理,对其子节点执行递归。
iter_xmlNodes(root)

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python递归函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python递归函数

参考:https://pythonspot.com/recursion/https://www.python-course.eu/recursive_functions.php一、递归函数两大要素 -- 终止条件和递归方程1、递归方程,即递
2023-01-30

python递归函数详解

递归函数是指在函数定义中使用函数自身的一种编程技巧。递归函数通常包括两个部分:基本情况和递归情况,基本情况是指函数的结束条件,递归情况是指函数调用自身的情况。递归函数的特点:1、更容易理解和编写,尤其是对于一些问题,如树的遍历、阶乘计算、斐
python递归函数详解
2023-12-18

函数递归

如果一个函数在内部调用自身本身,则该函数就是递归函数递归优缺点  优点:使用递归函数的优点是逻辑简单清晰      理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰  缺点:过深的调用会导致栈溢出栈溢出  使用递归函数
2023-01-31

python 递归与高阶函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。一个简单的递归函数(不正式)defcalc(n):print(n)returncalc(n)calc(10)执行输出一堆10之后,报错RecursionEr
2023-01-30

python_函数递归

函数递归函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数本身# import sys# print(sys.getrecursionlimit())# sys.setrecursionlimit(10000)# pr
2023-01-30

Python递归函数怎么使用

Python递归函数是一种在函数内部调用自身的函数。递归函数通常用于解决需要重复执行某个操作的问题,例如计算阶乘、斐波那契数列等。以下是一个计算阶乘的递归函数示例:```pythondef factorial(n):if n == 0:re
2023-05-13

Python基础3 函数、递归、内置函数

本节内容1. 函数基本语法及特性2. 参数与局部变量3. 返回值嵌套函数4.递归5.匿名函数6.函数式编程介绍7.高阶函数8.内置函数温故知新1. 集合主要作用: 去重关系测试, 交集\差集\并集\反向(对称)差集>>> a = {1,2,
2023-01-31

C++ 函数递归详解:尾递归优化

递归定义及优化:递归:函数内部调用自身,解决可分解为更小子问题的难题。尾递归:函数进行所有计算后才进行递归调用,可优化为循环。尾递归优化条件:递归调用为最后操作。递归调用参数与原始调用参数相同。实战范例:计算阶乘:辅助函数 factoria
C++ 函数递归详解:尾递归优化
2024-05-03

python函数递归调用的实现

本文主要介绍了python函数递归调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-19

python 内置函数补充 or 递归

一.内置函数的补充repr() 显示出字符串的官方表示形式 chr()print(chr(20013)) # 把数字编码转换成字符串ord()1 print(ord('中')) # 20013 把字符串转换成数字编码二
2023-01-30

Python 递归函数详解及实例

Python 递归函数 如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要付出一定的努力去理解和创建. 我
2022-06-04

python中的递归函数是什么

这篇文章将为大家详细讲解有关python中的递归函数是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代
2023-06-14

怎么调用Python递归函数与匿名函数

这篇文章主要讲解了“怎么调用Python递归函数与匿名函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么调用Python递归函数与匿名函数”吧!一. 递归函数  a) 引言:在一个函数中
2023-06-02

C++ 函数递归详解:递归优化技巧

函数递归是函数自身调用自身,通过分解问题为子问题提供解决复杂问题的有效方法。优化递归至关重要,以避免堆栈溢出。常见优化技巧包括:限制递归深度使用尾递归优化使用备忘录避免重复计算C++ 函数递归详解:递归优化技巧什么是函数递归?函数递归是
C++ 函数递归详解:递归优化技巧
2024-05-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录