当前位置: 首页 > news >正文

069、Python 函数的递归调用

函数可以自己调用自己吗???

这就涉及函数的递归的用法了。

递归的概念:

函数递归是指函数在其定义中直接或间接调用自身的过程。

递归是一种强有力的编程技术,通常用于解决可以被分解为相同问题的子问题的情况,每次调用函数时都会解决一个规模更小的子问题,直到达到递归的结束条件。

递归的基本要素:

  1. 基本情况(Base Case):递归函数中必须包含至少一个基本情况,即递归结束的条件。在基本情况下,函数不再调用自身,而是返回一个特定的值。

  2. 递归调用:在递归函数的定义中,函数会调用自身来解决规模更小的子问题。

递归示例 - 计算阶乘:

下面是一个计算阶乘的经典递归示例:

阶乘定义: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) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…...

经典游戏案例:植物大战僵尸

学习目标:植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 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制作任意工作表均可使用的聚光灯

在需要制作聚光的工作簿&#xff0c;按<ALTF11>组合键&#xff0c;打开VBE编辑器。在右侧[工程资源管理器窗格]选中ThisWorkbook模块&#xff0c;将以下代码复制粘贴到该模块的代码窗口。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target …...

【STM32-启动文件 startup_stm32f103xe.s】

STM32-启动文件 startup_stm32f103xe.s ■ STM32-启动文件■ STM32-启动文件主要做了以下工作&#xff1a;■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■ 栈空间大小 Stack_Size■ .map 文件的详细介绍■ 打开map文件 ■ 堆空间■ PRESERVE8 和 THUMB 指令…...

51学习记录(一)——51介绍及震动感应灯

文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、STC89C52 1.简介 所属系列&#xff1a;51单…...

2024GLEE生活暨教育(上海)博览会,8月20-22日,国家会展中心(上海)

2024GLEE生活暨教育(上海)博览会将于8月20-22日在中国国家会展中心&#xff08;上海&#xff09;举行&#xff0c;博览会总面积近万平方米&#xff0c;设有美好生活和教育产品两大主力展区&#xff0c;全面覆盖婴幼儿、学龄前、小学、初中、高中、大学、中年、老年各个年龄段的…...

debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情

文章目录 debug断点篇&#xff1a;打临时断点&#xff08;只用一次&#xff09;&#xff1a;alt断点条件断点&#xff1a;在断点上&#xff0c;点击右键&#xff0c;在Condition那里&#xff0c;设置我们需要的值&#xff0c;循环就会自动停到我们设置的那个值那里依赖断点&…...

51单片机STC89C52RC——6.1 中断系统

一&#xff0c;文字层面理解 反正我看下面的几段文字时脑壳没有正常运转。一个头几个大 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求&#xff0c;要求CPU暂停当前的工作&#xff0c;转而去处理这…...

Redis源码学习:高性能Hash表的设计与实现

哈希表&#xff08;Hash&#xff09;是Redis数据库的数据类型之一&#xff0c;理解哈希表的实现对于掌握Redis非常重要。这篇文章&#xff0c;从哈希冲突和哈希扩展这两个角度&#xff0c;来一步步讲解Redis哈希表的工作原理。 什么是哈希表&#xff1f; 哈希表是一种通过哈希…...

如何防范常见的数据库安全问题

随着数据量的增加和系统的复杂性提高,数据库可能面临多种安全威胁,包括未授权访问、数据泄露、注入攻击等。 1. 未授权访问 未授权访问是指,未经授权的用户对数据库的内容进行访问。这会导致数据泄露、数据篡改或其他安全事故。 针对未授权访问的防范措施如下。 (1)强化…...

[Day 19] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的數據透明性 區塊鏈技術作為一種分布式賬本技術&#xff0c;因其去中心化、不可篡改和高度透明的特性&#xff0c;已經在各行各業中得到了廣泛應用。在本文中&#xff0c;我們將深入探討區塊鏈的數據透明性&#xff0c;包括其原理、實現方法及相關代碼示例&#xff0c;…...

【Hadoop学习笔记】认识Hadoop

认识Hadoop 从网上找的课程做的笔记&#xff0c;有些图是自己理解画的&#xff0c;可能不正确&#xff0c;可以作为参考&#xff0c;有疑问的地方请直接指出&#xff0c;共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构&#xff0c;主要解决海量数据的存储和海…...

CISP-PTE综合靶机-WinServer2003

1.收集网站的地址和开放的端口,完成前期信息收集。10分 2.访问站点,找出站点的敏感文件,利用返回数据找到相关敏感信 息,完成网站结构的信息收集。10分 3.利用文件包含漏洞读取敏感文件,找出数据库连接凭证,利用此 凭证连接数据库。10分 4.网站后台提权:找出后台管理员登…...

sklearn之各类朴素贝叶斯原理

sklearn之贝叶斯原理 前言1 高斯朴素贝叶斯1.1 对连续变量的处理1.2 高斯朴素贝叶斯算法原理 2 多项式朴素贝叶斯2.1 二项分布和多项分布2.2 详细原理2.3 如何判断是否符合多项式贝叶斯 3 伯努利朴素贝叶斯4 类别贝叶斯4 补充朴素贝叶斯4.1 核心原理4.2 算法流程 前言 如果想看…...

年薪50w+的项目经理,手把手教你如何复盘

复盘是一种重要的学习和改进工具&#xff0c;对于项目经理来说&#xff0c;能帮助识别项目中的成功与失败&#xff0c;为未来的项目管理提供宝贵经验。 理论部分 定义目标。在开始复盘之前&#xff0c;明确复盘的目标是什么。是为了找出项目中的问题并提出解决方案&#xff0c…...

Web3新视野:Lumoz节点的潜力与收益解读

摘要&#xff1a;低估值、高回报、无条件退款80%...... Lumoz正通过其 zkVerifier 节点销售活动&#xff0c;引领一场ZK计算革命。 长期以来&#xff0c;加密市场以其独特的波动性和增长潜力&#xff0c;持续吸引着全球投资者的目光。而历史数据表明&#xff0c;市场往往在一年…...

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景&#xff1a;解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻…...

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些&#xff0c;相比文科说理工科的院校也更多&#xff0c;如何选择适合自己的专业&#xff0c;这是一个比较重要的课题&#xff0c;毕竟大学专业直接关系到职业&#xff0c;是一辈子的大事。 那么理科究竟如何选择专业呢&#xff1f;需要从什么地方…...

qt 简单实验 json格式的文件写入配置文件

1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> //读取json数据的配置文件int main(int argc, char *argv[]) {QApplication a(argc, argv);QString…...

将WIN10的wifi上网分享给以太网接口

目录 打开网络设置设置属性点这里的设置将wlan主机的以太网接口IP设为自动获取 如果连接不成功&#xff0c;拔网线重连一次 打开网络设置 设置属性 点这里的设置 将wlan主机的以太网接口IP设为自动获取 如果连接不成功&#xff0c;拔网线重连一次...

如何用自己电脑做网站服务器/私密浏览器免费版

初始vue,今天遇到了这问题。 错误: 1.组件命名规范问题 组件命名是&#xff0c;我们通常推荐驼峰命名法(首个单词首字母小写&#xff0c;从第二个单词开始首字母大写)&#xff1a; Vue.component("myComponent",{})在DOM中直接使用错误案例&#xff1a;<MyCompo…...

网站优化连云港哪家强?/百度图片搜索

目录1. 特殊文件与进程1.1 具有SUID/SGID权限的命令执行状态1.2 /proc/* 代表的意义1.3 查询已使用文件或已执行进程使用的文件1.3.0 fuser&#xff1a;使用文件或文件结构识别进程1.3.1 lsof&#xff1a;查看文件的进程信息1.3.1 pidof&#xff1a;返回运行程序的进程ID1. 特殊…...

制作网站的软件手机版/网络营销是做什么的工作

github精选前文传送门&#xff1a; 文章目录01 还担心春节抢不到票&#xff1f;02 testerSunshine/1230603 pjialin/py1230604 bypass&#xff08;分流抢票&#xff09;01 还担心春节抢不到票&#xff1f; 每逢佳节抢票难&#xff0c;难不倒程序员&#xff0c;代码走一走&…...

自己做网站好不好/广州网站排名优化报价

有时候从网页上copy来的文章中&#xff0c;会带有非常多的链接&#xff0c;这些链接很烦人是吧&#xff1f;如何批量删除&#xff08;一次性全部删除&#xff09;word文章中的超链接呢&#xff1f; 有些朋友说&#xff0c;CtrlA全选文章&#xff0c;然后点击格式工具栏上的“清…...

做个公司网站多少钱/百度网站大全

我们在表单验证的时候&#xff0c;使用表单验证是很常见的场景 if (!this.form.name) {this.utils.toast(姓名不能为空);return}if (!this.form.cardId) {this.utils.toast(身份证号码不能为空);return}if (!this.form.phone) {this.utils.toast(手机号码不能为空);return}if (…...

高端网站定制站/广州seo优化

解决Cannot resolve org.springframework.boot比如我遇到了Cannot resolve org.springframework.boot:spring-boot-starter-web:2.2.6.RELEAS一直下载不成功的&#xff0c;我一开始以为是网络太慢的原因&#xff0c;然后看了测试了网速没有问题&#xff0c;然后看一下Maven仓库…...