可能存在无限递归_Python之递归函数
❝
我们在前面的章节中,很多次的看到了在函数中调用别的函数的情况,如果一个函数在内部调用了自身,这个函数就被称为递归函数。
❞
高斯求和
def sum_number(n): total = 0 for i in range(1, n+1): total += i return total
sum = sum_number(100)print(sum)
但如果使用递归函数来写
def sum_number(n): if n <= 0: return 0 return n+sum_number(n-1)
sum = sum_number(100)print(sum)
分析一下代码
当n小于0的时候,直接给出和值为0,当n大于0时,结果是n加上sum_number(n-1)
。这里的sum_number(n-1)
又是一次sum_number
函数的调用,不过参数的值变成了n-1,要得到sum_number(n)
的值必须等待sum_number(n-1)
的值被计算出来,同样要得到sum_number(n-1)
的值必须等待sum_number(n-2)
的值,如此一路推算下去,直到sum_number(0)
,因为if语句的存在,它不需要等待sum_number(-1)
的计算了,而是直接给出结果0。然后程序一路返回,直到回到最初的sum_number(n)
,并给出最终结果。
核心思想
每一次递归,整体问题都要比原来减小,并且递归到一定层次时,要能直接给出结果。
每一个递归程序都要遵循相同的基本步骤:
- 初始化算法,递归程序通常需要一个开始时使用的种子值,可以向函数传递参数,或者提供一个入口函数,这个函数是非递归的,但可以为递归计算设置种子值;
- 检查要处理的当前值是否已经与基本条件相匹配,如果匹配,则进行处理并返回值;
- 使用更小的或更简单的子问题(或多个子问题)来重新定义答案;
- 对子问题运行算法;
- 将结果合并入答案的表达式;
- 返回结果。
例如:
lis = []all_top_comments = ["顶级评论1", "顶级评论2", "顶级评论3", "..."]
def get_comment(comments): for comment in comments: lis.append(comment) # 假设有一个child方法获取当前评论的所有子评论 child_comments = comment.child() # 如果有子评论的话,就递归查找下去,否则回退 if len(child_comments) > 0: get_comment(child_comments)
get_comment(all_top_comments)
使用递归函数需要注意递归深度溢出,在Python中,通常情况下,这个深度是1000层,超过将抛出异常。在计算机中,函数递归调用是通过栈(stack)这种数据结构实现的,每当进入一个递归时,栈就会加一层,每当函数返回一层,栈就会减一层。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。
可能存在无限递归_Python之递归函数相关推荐
- python函数的嵌套和递归_Python通过递归函数输出嵌套列表元素
1.先用 for 循环取 for item in l: if isinstance(item ,list): for newitem in item: print(newitem) else: pri ...
- python setattr无限递归_python – 如何正确使用__setattr__,避免无限递归
我想定义一个包含读写方法的类,可以调用如下: instance.read instance.write instance.device.read instance.device.write 为了不使用 ...
- 彻底理解python递归_Python开发之-Python递归图示理解
1.函数递归是函数式编程的重要组成部分,所以对函数递归的深层次理解十分重要.本人用图示的方法解释函数的层级递归方式,先理解下面的函数 deftest(n):if n == 1:return 1 els ...
- C语言丨函数的递归调用和递归函数
目录 前言 一.从阶乘引入 二.递归模板 1.递归函数模板 2.举例分析 三.从数学归纳法理解递归 四.更多递归实例 1.用递归方法编程计算Fibonacci数列 题目分析 程序 2.汉诺塔(Hano ...
- C语言无限递归和尚,递归——强大的解决问题之道
原标题:递归--强大的解决问题之道 作者:董成荣 来源:牛客网 递 归 什么是递归? 递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法.递归一词 ...
- python冒泡排序算法非递归_python 冒泡排序,递归
今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...
- 可能存在无限递归_做事永远无头无尾?人生中的递归现象
不知道大家有没有发现,在自己身边的人或者说就是自己,无论在职场还是学习中,有时候会陷入一种瞎忙碌的状态, 在周围的人看来你很忙碌,但是一旦需要拿出成果的时候,却又显得不尽人意,而最近的我就陷入了这样一 ...
- 无限“递归”的python程序
如果一个函数直接或者间接调用了自己,那么就形成了递归(recursion),比如斐波那契数列的一个实现 def fib(n):if n <= 2:return 1else:return fib( ...
- Python maximum recursion depth exceeded while calling a Python object (gevent的SSL无限递归错误)的问题解决
报错信息 源码位置 分析 很尴尬,完全看不出原因导致这个报错 解决方法 通过删除代码的方式一部一部删除,找到了问题出处 原因是包的顺序出现了问题,把位置互换一下,发现没有报错了,但是很明确的告诉你这两 ...
最新文章
- mysql 换行_教你如何用Python 连接 MySQL
- 机器学习速成课程 | 练习 | Google Development——编程练习:使用神经网络对手写数字进行分类
- NAS+CNN+Transformer=ViT-Res!MIT团队重磅开源ViT-Res,精度高于DeiT-Ti8.6%
- Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)
- 李开复:多次失败后,我总结出最优秀创业者的4个特点
- RIFF和WAVE音频文件格式
- 容器技术Docker K8s 27 容器服务ACK基础与进阶-监控管理
- 河南科技学院计算机专业是几本,河南科技学院是几本
- iTunes只能装C盘吗_就这一篇:教你真正有效地解决爆满的C盘!
- vb读取mysql数据库数据_VB读取ORACLE数据库的两种方法
- java开发自学手册 pdf_Java项目开发实例自学手册 PDF_IT教程网
- 云课堂计算机教师,校校云课堂教师端
- 数字化转型— 华为业务流程模型学习
- ADAS/AD控制器模块开发13 - Feature开发之LDWLKA
- 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 2月17日
- 几种常见树形数据结构小结
- Scrapy框架的使用之Scrapy入门
- Unity3D 摄像机滑动跟随
- N9344C安捷伦频谱分析仪
- 索尼前CEO平井一夫宣布6月退休 卸任董事长并退出董事会
热门文章
- 【采访】腾讯社交广告高校算法大赛第三周周冠军——到底对不队比赛经验及心得分享
- 业界分享 | 百度图神经网络实践
- Embedding 技术在推荐系统中的应用实践
- influxdb java api使用_java使用influxDB数据库的详细源码
- 漫谈广告竞价模式(一)
- 魔兽世界python脚本拍卖行_Python大法之告别脚本小子系列—信息资产收集类脚本编写(上)...
- python爬虫语言都能干什么_python除了爬虫还可以做什么
- python用户界面画图_通过海龟绘图学习Python-01
- linux能运行安卓模拟器吗,Ubuntu 14.04中使用模拟器运行Android系统
- 若依(RuoYi)如何不登录直接访问?