算法08-递归调用转为循环的通用方法
前导:问题引入
在Python中,递归调用过多会导致“递归深度过深”的错误,通常是因为递归没有正确终止条件或者递归层次太深。
这种错误通常会导致程序抛出 RecursionError 异常。
Python默认的递归深度限制大约是1000层(可以通过sys.getrecursionlimit()查看)。
修正方式是:
import sys
sys.setrecursionlimit(3000) # 增加递归深度限制
另外就是将递归化为循环。
一、递归转循环的通用方法
将递归调用转为循环的普通方法,通常需要使用 栈(Stack) 来模拟递归的调用过程。递归的本质是函数调用栈,而我们可以通过显式地使用栈数据结构来实现相同的逻辑。以下是详细步骤和一个通用的转换方法:
1. 理解递归的执行过程
递归函数的核心是:
- 选择:在当前步骤中做出选择。
- 递归:基于当前选择,进入下一层递归。
- 回溯:撤销当前选择,回到上一步。
2. 使用栈模拟递归
- 栈中存储的是每一步的状态(如当前选择、路径等)。
- 每次从栈中弹出一个状态,处理当前步骤,然后将新状态压入栈中。
3. 通用步骤
- 初始化一个栈,将初始状态压入栈中。
- 进入循环,直到栈为空:
- 弹出栈顶状态。
- 处理当前状态(如记录结果、更新路径等)。
- 根据当前状态生成新的状态,并压入栈中。
- 循环结束后,返回结果。
二、递归转循环的核心思想
-
栈的设计:
- 栈中存储的是每一步的状态,通常是一个元组或对象,包含当前的选择和路径。
- 例如,在子集问题中,状态可以是
(start, path),其中start是当前选择的起始位置,path是当前路径。
-
循环过程:
- 弹出栈顶状态,处理当前步骤。
- 根据当前状态生成新的状态,并压入栈中。
- 通过循环不断处理栈中的状态,直到栈为空。
-
回溯的实现:
- 在生成新状态时,需要确保能够撤销当前选择,以便尝试其他选项。
- 例如,在子集问题中,选择当前元素后,需要将其从路径中移除,以便尝试其他元素。
三、示例:子集问
相关文章:
算法08-递归调用转为循环的通用方法
前导:问题引入 在Python中,递归调用过多会导致“递归深度过深”的错误,通常是因为递归没有正确终止条件或者递归层次太深。 这种错误通常会导致程序抛出 RecursionError 异常。 Python默认的递归深度限制大约是1000层(可以通过sys.getrecursionlimit()查看)。 修正方式…...
[创业之路-300]:进一步理解货币与金钱, 货币与货币政策
目录 一、货币 1.1 概述 1、货币的定义 2、货币的形态演变 3、货币的职能 4、货币的价值衡量 1.2 货币的分层 1、货币分层的目的与意义 2、货币分层的划分标准与层次 3、各国货币分层的实践 4、货币分层的影响与应用 1.3、M0、M1、M2变化对股市的影响 1、M0变化对…...
达梦:跟踪日志诊断
目录标题 参考连接**性能诊断:跟踪日志诊断****总结** 参考连接 性能诊断 -> 跟踪日志诊断 性能诊断:跟踪日志诊断 备份现有的日志配置文件 在修改文件之前,建议先备份原始文件,以防万一需要恢复。 cp /opt/dmdbms/dmdata/DA…...
Qwen2-VL 的重大省级,Qwen 发布新旗舰视觉语言模型 Qwen2.5-VL
Qwen2.5-VL 是 Qwen 的新旗舰视觉语言模型,也是上一代 Qwen2-VL 的重大飞跃。 Qwen2.5-VL主要特点 视觉理解事物:Qwen2.5-VL不仅能够熟练识别花、鸟、鱼、昆虫等常见物体,而且还能够分析图像中的文本、图表、图标、图形和布局。 代理性&…...
js考核第三题
题三:随机点名 要求: 分为上下两个部分,上方为显示区域,下方为控制区域。显示区域显示五十位群成员的学号和姓名,控制区域由开始和结束两个按钮 组成。点击开始按钮,显示区域里的内容开始滚动,…...
LabVIEW袜品压力测试系统
开发了一种基于LabVIEW开发的袜品压力测试系统。该系统利用LabVIEW并结合灵敏的传感器和高精度的处理模块,实现了对袜品压力的精确测量和分析。系统不同于传统的服装压力测试方法,为研究和评价袜子的舒适性提供了新的测试手段。 项目背景 该系统的…...
jsp页面跳转失败
今天解决一下jsp页面跳转失败的问题 在JavaWeb的学习过程中,编写了这样一段代码: <html> <body> <h2>Hello World!</h2><%--这里提交的路径,需要寻找到项目的路径--%> <%--${pageContext.request.context…...
1.推荐算法基本概念
推荐算法是一个非常重要且广泛应用的领域,特别是在电子商务、社交媒体、内容推荐等领域。第一课我们将介绍推荐算法的基本概念和分类,并简单讲解两种常见的推荐算法:协同过滤和基于内容的推荐。 推荐算法的基本概念 推荐系统的目标是根据用…...
Java 大视界 -- 大数据伦理与法律:Java 技术在合规中的作用与挑战(87)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十五节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(RoutineControl_0x31服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x31服务、例程控制、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x31服…...
【深度强化学习】策略梯度算法:REINFORCE
策略梯度 强化学习算法进阶 Q-learning、DQN 及 DQN 改进算法都是基于价值(value-based)的方法,其中 Q-learning 是处理有限状态的算法,而 DQN 可以用来解决连续状态的问题。在强化学习中,除了基于值函数的方法&#…...
手机用流量怎样设置代理ip?
互联网各领域资料分享专区(不定期更新): Sheet...
CI/CD部署打包方法
项目目前部署方式: 各地区服务器打包同一个runner(需要互相排队,不并发)各地区客户端可以并发打包,同个地区客户端打多个包需要排队 部署方法 下载gitlab-runner: https://docs.gitlab.com/runner/insta…...
LabVIEW 中dde.llbDDE 通信功能
在 LabVIEW 功能体系中,位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\dde.llb 的 dde.llb 库占据着重要的地位。作为一个与动态数据交换(DDE)紧密相关的库文件,它为 LabVIEW 用户提供了与其他…...
探索后端开发中的异步API:基于Resilience4j与Reactive Programming的高性能设计
引言 随着微服务架构的普及,后端系统面临的挑战愈发严峻,尤其是在高并发和高可用性方面。传统的同步调用模式虽然简单,但在处理大量并发请求时可能会成为瓶颈。为了应对这一问题,异步编程逐渐成为后端开发的热门话题。 在本文中…...
leetcode 2915. 和为目标值的最长子序列的长度
题目如下 数据范围 本题就是典型的背包问题target就是容量,nums[i]就是第i个物品的重量。其实就是选最多的物品使得背包刚好装满。 令f(i,j)为当考虑到i - 1物品时刚好装到j重量的物品数。 当j > nums[j]时 有f(i,j) max(f(i - 1,j - nums[i - 1]) 1,f(i -…...
【Vue】打包vue3+vite项目发布到github page的完整过程
文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…...
Flutter编译问题记录
问题: 运行出现以下报错 Launching lib/main.dart on macOS in debug mode... Warning: CocoaPods not installed. Skipping pod install. CocoaPods is a package manager for iOS or macOS platform code. Without CocoaPods, plugins will not work on iOS or …...
poetry shell - 作为插件安装和使用
安装插件 安装完 poetry,想进入环境,执行 poetry shell 后会报错,是因为 poetry shell 在后面的版本中,是作为插件,需要额外安装。 poetry self add poetry-plugin-shell关于 poetry-plugin-shell github : https:/…...
UE5中的快捷键汇总
以下是Unreal Engine 5(UE5)中一些常用的快捷键大全,涵盖编辑器操作、视口导航、蓝图编辑等多个方面(会持续补充作为笔记存在): 通用快捷键 快捷键功能Ctrl S保存当前关卡Ctrl Shift S保存所有Ctrl Z撤销Ctrl C复制Ctrl V…...
字节Agent岗三面:你们线上跑了 RAG,那你怎么衡量它的效果好不好?
👔面试官:你们线上跑了 RAG,那你怎么衡量它的效果好不好? 🙋♂️我:我主要看用户反馈,有人投诉就说明效果不好,没人投诉就还行。 👔面试官:靠用户投诉来评…...
阿里FunASR模型体验:Speech Seaco Paraformer ASR,单文件批量处理全支持
阿里FunASR模型体验:Speech Seaco Paraformer ASR,单文件批量处理全支持 1. 引言:为什么选择Seaco Paraformer ASR? 在智能语音交互日益普及的今天,准确高效的中文语音识别(ASR)技术成为许多应用的核心需求。无论是会…...
Phi-4-mini-flash-reasoning行业落地:IT运维故障逻辑链自动推演案例
Phi-4-mini-flash-reasoning行业落地:IT运维故障逻辑链自动推演案例 1. 引言:IT运维的痛点与AI解决方案 IT运维工程师每天都要面对各种系统故障,从服务器宕机到网络异常,从数据库连接失败到应用性能下降。传统排查方式依赖工程师…...
CANN/pyasc矩阵乘法迭代方法
asc.language.adv.Matmul.iterate 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc Matmul.iterate(en_parti…...
CANN驱动设备错误码查询
dcmi_get_device_errorcode_string 【免费下载链接】driver 本项目是CANN提供的驱动模块,实现基础驱动和资源管理及调度等功能,使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_device_errorcode_string(int c…...
深度图像先验:基于PyTorch的水印去除终极指南
深度图像先验:基于PyTorch的水印去除终极指南 【免费下载链接】Watermark-Removal-Pytorch 🔥 CNN for Watermark Removal using Deep Image Prior with Pytorch 🔥. 项目地址: https://gitcode.com/gh_mirrors/wa/Watermark-Removal-Pytor…...
昇腾CANN单算子参数Dump示例
0_adump_args 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 描述 本用例展示了单算子执行场景下如何管理Dump算子信息,并将算子信息文件输出到path参数指定的目录,主线程中设…...
对比自行维护多个API密钥使用Taotoken聚合服务在稳定性上的体验差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比自行维护多个API密钥与使用Taotoken聚合服务在稳定性上的体验差异 1. 引言:从分散管理到统一接入的转变 在开发过…...
CANN hcomm内存导出API文档
HcommMemExport 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT:支持At…...
Java基础十六:枚举,包,反射
一、枚举(Enum) 1. 什么是枚举 枚举是一种特殊的类,用于定义一组固定的常量。 2. 基本用法 // 最简单的枚举 public enum Season {SPRING, SUMMER, AUTUMN, WINTER }// 使用枚举 public class TestEnum {public static void main(String[…...
