069、Python 函数的递归调用
函数可以自己调用自己吗???
这就涉及函数的递归的用法了。
递归的概念:
函数递归是指函数在其定义中直接或间接调用自身的过程。
递归是一种强有力的编程技术,通常用于解决可以被分解为相同问题的子问题的情况,每次调用函数时都会解决一个规模更小的子问题,直到达到递归的结束条件。
递归的基本要素:
-
基本情况(Base Case):递归函数中必须包含至少一个基本情况,即递归结束的条件。在基本情况下,函数不再调用自身,而是返回一个特定的值。
-
递归调用:在递归函数的定义中,函数会调用自身来解决规模更小的子问题。
递归示例 - 计算阶乘:
下面是一个计算阶乘的经典递归示例:
阶乘定义:n! = n * (n - 1) * (n - 2) * … * 2 * 1
即:n! = n * (n - 1)!
def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)result = factorial(5)
print(result) # 输出: 120
示例中,factorial 函数通过递归调用自身来计算阶乘。当 n 达到 0 时,递归结束,返回 1。
递归的优缺点:
-
优点:
- 使代码更简洁和易读,尤其适用于解决树形结构或分治问题。
- 可以将复杂问题分解为简单的子问题,降低问题的复杂度。
-
缺点:
- 可能会导致性能问题,因为递归调用会占用更多的内存和计算资源。
- 可能会导致栈溢出,特别是在递归深度过深或者没有合适的基本情况时。
总结:
- 函数调用使用的是栈空间,但内存中只有极小一部分属于栈空间(一般512k或1M),所以要是无休止的调用,栈空间迟早会消耗殆尽,从而导致导致栈溢出(Stack Overflow)错误,程序直接崩溃。
- 不管函数调用的是别的函数,还是自身,一定要做到尽快收敛,在比较有限的调用次数内能够结束,而不是无限制的调用函数。
- 递归的设计需要合理地设置递归结束条件,以确保递归能够正确地终止。
- 函数的递归可以使代码更简洁和易读,但在使用时需要注意控制递归深度,以避免不必要的性能消耗。
相关文章:
069、Python 函数的递归调用
函数可以自己调用自己吗??? 这就涉及函数的递归的用法了。 递归的概念: 函数递归是指函数在其定义中直接或间接调用自身的过程。 递归是一种强有力的编程技术,通常用于解决可以被分解为相同问题的子问题的情况&…...
数仓开发那些事_番外
一位神州的正式员工(没错,就是之前文章中出现的实习生):一闪,你今年涨工资了吗? 一闪:mad,一年辛苦到头只涨了500米 神州员工:你去年绩效不是优秀吗,怎么就涨…...
Vue3+TypeScript项目实战——打造雨雪交加的智慧城市
个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 …...
经典游戏案例:植物大战僵尸
学习目标:植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum Z…...
Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
vscode+picgo+gitee实现Markdown图床
vscode中编辑Markdown文件,复制的图片默认是保存在本地的。当文档上传csdn时,会提示图片无法识别 可以在gitee上创建图床仓库,使用picgo工具上传图片,在Markdown中插入gitee链接的方式来解决该问题。 一、 安装picgo工具 1.1 v…...
【thinkphp问题栏】tp5.0分页技巧
一、调用内置方法paginate thinkphp内置了一个paginate方法支持分页功能 该方法位于library\think\db\Query.php内 /*** 分页查询* param int|array $listRows 每页数量 数组表示配置参数* param int|bool $simple 是否简洁模式或者总记录数* param array $config 配…...
获取时间戳是使用System.currentTimeMillis()还是使用new Date().getTime()(阿里开发规范)?
1.阿里规范 在阿里的Java开发手册中强制要求使用System.currentTimeMillis() 2.为什么(源码详解) new Date().getTime()它实际上也是调用的System.currentTimeMillis(),源码分析。 这个fastTime是它的成员变量,在new Date()的时候就被赋值了。 扩展一…...
仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮
, mWidth - mCircleWidth, mHeight - mCircleWidth); canvas.drawRoundRect(rectF, mHintBgRoundValue, mHintBgRoundValue, mHintPaint); //前景文字 mHintPaint.setColor(mHintFgColor); // 计算Baseline绘制的起点X轴坐标 int baseX (int) (mWidth / 2 - mHintPaint.m…...
Docker部署nacos集群
docker拉取nacos镜像,本文使用nacos2.0.3 三台服务器都要执行以下命令 docker pull nacos/nacos-server:v2.2.0准备挂载的日志目录和配置文件目录 日志:mkdir /usr/local/software/nacos/logs 配置文件:/usr/local/software/nacos/conf在配…...
centos查找文件 及 操作写入的进程
du -sh * 查看目录空间占用、发现大文件,确定进程,结束 yum install lsof 安装lsof 查看文件写入的 进程 2. lsof /root/.influxdbv2/engine/data/bab49411e5f7cbce/autogen/1/000000036-000000002.tsm COMMAND PID USER FD TYPE …...
构建高可用Java微服务架构的秘籍
构建高可用Java微服务架构的秘籍 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 随着云计算和分布式系统的快速发展,微服务架构已成为构建大型应用…...
VBA学习(18):VBA制作任意工作表均可使用的聚光灯
在需要制作聚光的工作簿,按<ALTF11>组合键,打开VBE编辑器。在右侧[工程资源管理器窗格]选中ThisWorkbook模块,将以下代码复制粘贴到该模块的代码窗口。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target …...
【STM32-启动文件 startup_stm32f103xe.s】
STM32-启动文件 startup_stm32f103xe.s ■ STM32-启动文件■ STM32-启动文件主要做了以下工作:■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■ 栈空间大小 Stack_Size■ .map 文件的详细介绍■ 打开map文件 ■ 堆空间■ PRESERVE8 和 THUMB 指令…...
51学习记录(一)——51介绍及震动感应灯
文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示:以下是本篇文章正文内容,下面案例可供参考 一、STC89C52 1.简介 所属系列:51单…...
2024GLEE生活暨教育(上海)博览会,8月20-22日,国家会展中心(上海)
2024GLEE生活暨教育(上海)博览会将于8月20-22日在中国国家会展中心(上海)举行,博览会总面积近万平方米,设有美好生活和教育产品两大主力展区,全面覆盖婴幼儿、学龄前、小学、初中、高中、大学、中年、老年各个年龄段的…...
debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情
文章目录 debug断点篇:打临时断点(只用一次):alt断点条件断点:在断点上,点击右键,在Condition那里,设置我们需要的值,循环就会自动停到我们设置的那个值那里依赖断点&…...
51单片机STC89C52RC——6.1 中断系统
一,文字层面理解 反正我看下面的几段文字时脑壳没有正常运转。一个头几个大 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这…...
Redis源码学习:高性能Hash表的设计与实现
哈希表(Hash)是Redis数据库的数据类型之一,理解哈希表的实现对于掌握Redis非常重要。这篇文章,从哈希冲突和哈希扩展这两个角度,来一步步讲解Redis哈希表的工作原理。 什么是哈希表? 哈希表是一种通过哈希…...
如何防范常见的数据库安全问题
随着数据量的增加和系统的复杂性提高,数据库可能面临多种安全威胁,包括未授权访问、数据泄露、注入攻击等。 1. 未授权访问 未授权访问是指,未经授权的用户对数据库的内容进行访问。这会导致数据泄露、数据篡改或其他安全事故。 针对未授权访问的防范措施如下。 (1)强化…...
SecGPT-14B镜像免配置实战:开箱即用的网络安全大模型推理方案
SecGPT-14B镜像免配置实战:开箱即用的网络安全大模型推理方案 1. 为什么选择SecGPT-14B 在网络安全领域,专业知识的获取往往需要多年经验积累。SecGPT-14B作为一款专注于网络安全的大语言模型,能够为安全工程师、开发人员和IT运维人员提供即…...
Pixel Couplet Gen快速上手:三步完成像素春联生成器本地部署与微信小程序对接
Pixel Couplet Gen快速上手:三步完成像素春联生成器本地部署与微信小程序对接 1. 项目概览 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型驱动,它能够将用户输入的文字愿望转化为富有创意的像素风格…...
intv_ai_mk11效果展示:真实用户提问‘如何提高店铺转化率’获得4维度可执行策略
intv_ai_mk11效果展示:真实用户提问如何提高店铺转化率获得4维度可执行策略 1. 案例背景与问题描述 在电商运营中,店铺转化率是衡量经营效果的核心指标之一。某服装店铺运营人员向intv_ai_mk11 AI对话机器人提出了一个典型问题:"如何提…...
人事档案整理系统开发记录
档案整理系统开发记录 本篇文章,用于记录我个人开发档案整理工具的所有问题。 说明:开发该工具适用于人事档案处理工具,适用于档案处理,帮助档案整理人员更轻松的移交。 我会一步一步记录,整个软件开的所有的问题&…...
深入探索Java JPA中的CriteriaQuery
在Java持久化API(JPA)中,CriteriaQuery 提供了强大的查询功能,允许我们以面向对象的方式构建动态查询。今天我们将通过一个实际的例子,深入探讨如何使用CriteriaQuery来获取特定书籍的最新更新ID。 什么是CriteriaQuery? CriteriaQuery是JPA的一部分,它提供了一种类型…...
公司SEO推广与关键词策略的关系是什么_公司SEO推广的长期效果如何确保
公司SEO推广与关键词策略的关系是什么_公司SEO推广的长期效果如何确保 什么是SEO推广? 我们来了解一下什么是SEO推广。SEO,全称搜索引擎优化,是通过优化网站内容和结构,提高其在搜索引擎自然排名中的位置,从而吸引更…...
数据处理的艺术:Pandas中的字符串操作
在数据分析和处理的过程中,经常会遇到需要对数据框中的字符串进行复杂操作的情况。本文将通过一个具体的实例,展示如何使用Pandas库来处理字符串列表、去重、合并和计数等操作。 问题背景 假设我们有一个数据框,其中包含一个名为REFIX_LIST的列,该列每个单元格包含由逗号…...
【数据结构与算法】二叉树从建立开始
为什么你学了二叉树却还是不会做题?从“建树”到“解题”的完整思维体系在学习数据结构的过程中,二叉树几乎是每个人都会接触的内容。但一个很现实的问题是:很多人会写遍历,却不会做题。表面上看是代码能力的问题,实际…...
有了这个Python备忘录,代码拿来即用
这段时间代码写的少了,周末用python写一个小爬虫,却发现连线程的一些方法都不记得了,还得百度查教程。工作越忙,记性越差,发现我疏远了代码,代码也疏远了我。 PS:对于小白来说自学也不是件容易…...
生产环境Python 3.14 JIT崩溃率突增400%?,资深SRE团队紧急封存的8个未公开__PyJIT_TraceConfig参数调优组合
第一章:Python 3.14 JIT 编译器性能调优生产环境部署全景图Python 3.14 引入的原生 JIT 编译器(代号 “PyJIT”)标志着 CPython 运行时架构的重大演进。它不再依赖外部工具链(如 Cython 或 Numba),而是以内…...
