递归与循环,为什么老是写错?

关于递归循环的总结(包含题目解析与思路) C语言函数————递归(曾经困扰我很久的问题) 相信大家在一开始学习函数这一章节的时候,像我这样的白痴脑袋曾经被递归这一算法思想困扰了很久。 所以这样一篇博客早已是大一上学期刚学完递归后的我想总结的小节,这不刚放寒假嘛,赶紧抓住这一时机,写下了这样一篇博客~ 希望大家看完发现错误后能即使留言批评与纠正。 首先先介绍一下递归 递归,顾名思义,就是套娃(doge)。所以刚开始作为刚接触语言学习的我来说,我就纯把递归理解为循环了,因为都是对代码的反复使用。虽说这样理解好像没啥很大的毛病,因为可以使用循环的地方通常 阅读详情

递归与循环,通常是我们用来解决,问题规模大,并且有重复性的步骤的问题

我一般会使用递归,因为递归的逻辑清晰,代码实现起来方便,今天我们不去关注,时间复杂度,空间复杂度,栈溢出的情况,只去考虑两种编程的理论与代码的相结合。

就拿一个简单的二分法来讲吧。如果你脑海里是递归的想法,去写一个循环解决的方法的话,相信我你会遍体鳞伤,不信,你可以去试试,很多细节之处,你可能考虑不到位,导致你的程序出现错误。如果你此时还是用递归的思想去检查代码,会很难去发现问题,但是如果你转变思路,去使用循环的思想,你很快就能够发现问题,并去解决它。

这样其实有点多此一举的感觉,如果你是递归的思想,就去写递归的算法,循环的思想就去写循环的算法。想清楚再去写。很多算法没有绝对意义上的好与坏,环境不同我们的选择不同,如果排序就用一种,查找也``用一种,什么都去用一种,未免太死板了些吧。

给大家看看我的代码吧,欢迎批评。
递归算法:
当到达边界条件和找到key的时候,不再去调用自身,直接返回。
在这里插入图片描述
循环算法:找到了就直接返回位置,根本没找到就返回-1
在这里插入图片描述

希望大家关注我,我会互关的,一起学习,一起进步。

兄dei,你的代码死循环了吗? 前言 代码死循环这个话题,个人觉得还是挺有趣的。因为只要是开发人员,必定会踩过这个坑。如果真的没踩过,只能说明你代码写少了,或者是真正的大神。 尽管很多时候,我们在极力避免这类问题的发生,但很多时候,死循环却悄咪咪的来了,坑你于无形之中。我敢保证,如果你读完这篇文章,一定会对代码死循环有一些新的认识,学到一些非常实用的经验,少走一些弯路。 死循环的危害 我们先来一起了解一下,代码死循环到底有哪些危害? 程序进入假死状态, 当某个请求导致的死循环,该请求将会在很大的一段时间内,都无法获取接口的返回,程序好 阅读详情

相关推荐

AutoCAD2014与ObjectARX开发环境搭建实战指南

本文提供了一份详细的AutoCAD2014与ObjectARX开发环境搭建实战指南。内容涵盖从AutoCAD2014、Visual Studio 2010及ObjectARX 2014 SDK的版本匹配与环境准备,到Wizard安装、编码问题解决、Visual Studio配置,并最终通过一个完整的绘图命令开发示例,手把手引导开发者创建并加载第一个可运行的ObjectARX插件,为后续深入开发奠定坚实基础。

weixin_28475533的博客 286

递归的深入理解

什么是递归定义? 引用自身的这种现象被称为递归定义(recursive definition)。在我们刚刚的描述里,二分搜索算法使用了它自己的描述。 换句话说就是:在二分搜索定义里,“递归”地“调用”了二分搜索——因此,被称为“递归定义”。乍一看,你可能会觉得递归定义没什么意义。相信你曾经有一位老师坚持不让你在一个词的定义里使用这个词本身,因为这被称为循环定义,通常在考试中不会得分。 数学中的递归 然而,在数学里,一直使用着某些递归定义。只要我们在制定和使用递归定义时特别小心,就会发现它们非常地方便而且功能

鸭梨的博客 816

生信分析服务MR孟德尔随机化单细胞测序转录组数据分析网络药理学

通过上述技术整合,可实现从基因-环境-疾病关联到药物机制解析的全链条研究,为疾病机制解析和药物研发提供新思路。结合,是当前生物信息学领域的前沿方法,尤其在疾病机制解析、靶点发现和药物研发中展现出巨大潜力。

matlabgoodboy的博客 1520

递归与循环

理论上,递归与循环是等价的,任何循环都可以重写为递归形式。很多递归也可以用循环来代替。不同的是,递归需要使用栈,而栈的大小是有限的,因此,递归的深度也会受到一定的限制。1.Java不支持为递归。2.有些语言没有循环语句,只能使用递归。...

m0_55078662的博客 2494

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 246

ccproxy 6.61 注册机(纯绿/傻瓜/真正去除线程限制)

导读:   软件介绍   1、 CCPROXY 6.61 注册机(纯绿/傻瓜/真正去除线程限制)   ***前言,这次的升级官方改动不大,据说只是为了不被某些软件当病毒***   附件包中解压即免安装版,CcREGTOOLFF.exe为注册机。   本人继续向大家隆重推出《CCPROXY6.61哎呀……破解版》   还是那个提示:   在此之前,本人还是那句老话想提示大家,CCPROXY是

i53nd的专栏 1万+

循环(迭代)与递归的区别

循环(迭代)与递归的区别   1。递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法。 当然,从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的。但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初...

summerbell 1586

别再傻傻分不清了!STM32定时器里Prescaler和ClockDivision到底有啥区别?

本文深入解析STM32定时器中Prescaler和ClockDivision的区别与应用场景。Prescaler作为定时器的'心跳调节器',决定计数频率;而ClockDivision则是输入捕获的'抗噪滤镜',有效抑制高频噪声。通过实战案例和示波器实测数据,帮助开发者避免常见配置误区,提升嵌入式系统稳定性。

weixin_29193259的博客 319

什么是递归?递归和循环的异同

简单来说,循环是有去无回,而递归则是有去有回(因为存在终止条件)。 def fib(x): if x < 2: return 0 if x == 0 else 1 # 当x > 2时,开始递归调用fib()函数: return fib(x - 1) + fib(x - 2) print(fib(6)) # 打印结果为:8 递归函数的必要条件:终止条件,递归调用。在达到终止条件之前,重复递归调用函数。 循环函数的必要条件:循环终止条件。 ...

代码DJ的博客 981

Tessent MBIST SDC

主要是两个PROC,tessent_constrain_${design_name}_mentor_ijtag_non_modal和tessent_constrain_${design_name}_mentor_memory_bist_modal。其中,Memory/MBIST controller/MEM Interface可以从func_clk_1来(用func_clk_1和func_clk_2的高频时钟),如图中红色线。其中,SIB和BAP用ijtag_tck的clock,如图绿色线。

po_poo的博客 1988

从数据库到数据仓库:数据仓库导论

本文为数据仓库导论,旨在介绍数据仓库的基本理念和应用场景,帮助读者理解数据仓库的重要性及其在企业中的实际应用。

探索大数据世界 - 深入解析数据存储、分布式计算与人工智能 2784

c/c++ 代码优化及常见错误

目录 1.代码优化 for循环 位运算 输入输出 打表法(骗分而已) 数组合并 减少函数参数 递归(搜索)剪枝 数组按行访问 分块 2.常出的错误 判断相等 拼写错误 1.代码优化 for循环 未优化代码: for(i=0;i<sqrt(n);i++) for(单次表达式;条件表达式;末尾循环体),结束条件写在中间,结束一...

关注网络安全、云原生安全 8358

钢结构焊接连接工艺

钢结构焊接连接工艺

wwdoffice950426的博客 61

组件调用了,地址也写对了,components里面也加了还是报错did you register the component correctly? For recursive components,

组件调用了,地址也写对了,components里面也加了还是报错did you register the component correctly? For recursive components,

G佳伟 739

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mysql 递归_MYSQL 8.019 CTE 递归查询怎么解决死循环三种方法

MYSQL CTE 是8.0 引入的SQL 查询的一种功能,通过CTE 可以将复杂的SQL 变得简单,便于分析和查询.其中CTE 有一种功能递归,并且牵扯到递归就会有一个问题的提出,就是无限递归的问题.下面是一个递归死循环的例子这里先解释一下CTE 递归1 递归查询至少包含两个子查询, 第一个查询的目的是设置递归的初始值2 第二个查询成为递归查询,第二个查询调用第一个查询的结果,...

weixin_39873325的博客 821

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c语言冒泡排序(含循环和递归)

冒泡排序,包含循环和递归还有函数的应用

2302_79815969的博客 2528

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python对象调试:从<object at 0x...>到__str__与__repr__的深度解析

在Python面向对象编程中,对象的字符串表示是调试和日志记录的基础。其核心原理依赖于两个特殊方法:__repr__和__str__。__repr__旨在提供对象的官方、无歧义的表示,理想情况下应能用于重建对象,常被开发者用于调试;而__str__则侧重于提供对用户友好的、可读性高的输出。理解并正确实现这两个方法,能从根本上解决打印自定义类对象时出现类似<__main__.MyClass object at 0x...>的默认内存地址显示问题,从而显著提升代码调试效率和可维护性。本文通过具体示例,深入探讨了

weixin_30455023的博客 370

C语言九九乘法表:从基础循环到递归的五种实现与调试技巧

循环控制是C语言编程的核心基础,它通过重复执行代码块来处理数据集合或实现特定逻辑。其原理在于利用条件判断和计数器,控制代码的执行流程。掌握循环对于实现算法、处理用户输入和构建程序逻辑至关重要,是开发各类应用的基础。在初学阶段,通过实现九九乘法表这一经典练习,可以深入理解循环嵌套、格式化输出和代码结构。本文聚焦于C语言基础教学与编程思维训练,详细解析了包括经典双层for循环、while循环、格式化输出控制、单层循环数学解法以及函数封装与递归在内的五种实现方法,并提供了针对输出格式对齐、死循环等常见问题的调试技

weixin_30629653的博客 393

CPP:把for改写成递归形式的小技巧()

前言:考试的时候(或者平常)可能都会遇到DFS啦各种递归啦之类的算法。我们老师说的好:只要你会了for和DFS,就能拿省一。于是我就开始思考DFS和for之间的关系,总结了一下改写的小技巧。 简单介绍: for循环其实绝大部分可以改写成递归形式,在不考虑空间复杂度的形况下,把for改写成递归形式的好处就是可以很方便的调试代码(不然你发现你代码写错了,拖着一撮for上下乱跑,大括号你都对应不起来了就),还能便捷的把for改成n层for(forrer,比for...

qq_50115621的博客 1526

【高性能元编程必修课】:为什么90%的开发者都写错模板递归终止条件?

掌握模板递归的终止条件设计,解决编译期无限展开难题。详解C++元编程中特化与SFINAE两种核心方法,适用于类型萃取、数值计算等场景,提升代码性能与安全性。避免常见错误,值得收藏。

simcode的专栏 379

函数的递归

从上面的两个实例我们可以看出来,递归很强,但是对于没有好好使用的递归,那么就会产生一些不好的结果,递归虽然代码少,但是在每一次调用函数时都会重新像内存中申请空间,这样下来,内存开销就会变大,最后可能会导致栈溢出的现象,这是一个非常不好的现象,所以在我们实在没有办法的时候我们在使用递归的方法才是正道。这两个思想是很重要的,对于后期当我们再次遇到相似的题目的时候就需要使用到这两个思想,那么有了这俩个思想,我们就就可以进入到使用递归的方式正序打印一个整数的每一位的代码中了,在这之前,我们还是先来分析一下。

DREW_Smile的博客 1171

c语言递归:什么是递归&&递归怎么用(例子:阶乘函数)

初学C语言时不知道什么是递归,就知道哦,那样老师教的就是递归,可是最后复习的时候,看见递归写菲波那切数列时,还是不知道在写的,只知道用循坏写递归,当然当时学递归时候和循环一起学的加上也不熟悉,所以写错了,所以写了这篇文章给你们,希望在学习的路上加油! 首先,递归是什么 度娘告诉你 是不是看不懂,其实我也看不懂(手动狗头) 简而言之,递归就是一种算法, 举个从小就听过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山… 这其实就是递归

m0_51936941的博客 655

如何处理SQL循环逻辑_探索递归CTE实现复杂计算

能,递归CTE仅适用于树形结构、层级遍历、路径展开等场景;WITH RECURSIVE 后必须紧跟 CTE 名和列名列表,列类型由锚点查询决定,递归支必须严格对齐——少一个 CAST 就报错 types don't match between anchor and recursive part递归支里不能出现聚合函数、GROUP BY、ORDER BY(除非在子查询里)、窗口函数(多数数据库不支持)终止条件藏在 WHERE 里,但这个 WHERE 是对“当前递归层”的过滤,不是全局开关。

qq_37290693的博客 280

第三章 递归

今天看了一下递归比较初级 简化 ,递归就是不断的调用自己 有名人说过一句话:如果使用循环,程序效率会更高,如果使用递归,程序可能更容易被理解 递归的基线条件和递归条件 1,递归条件 :自己调用自己 2. 基线条件:如何让自己停下来 栈 栈是啥:就是先进后出 ,最著名的 操作数栈 i=1 i=i++ j = i++ int k = i + (++i)*(i++) 先把1放栈里 局部变量表为 i=1, 然后出栈 把 1赋值给局部变量表第一个值 就是 i 所以 i=1 i = i++ 是啥那 先把i的值放栈里,压

小小程序员的博客 227

LangGraph 循环防护详解:recursion_limit、RemainingSteps 与 GraphRecursionError

LangGraph 为循环工作流提供了 recursion_limit 机制,防止无限执行。该参数限制单次图运行的最大 SuperStep 数量(非函数递归次数),并通过 config["metadata"]["langgraph_step"] 跟踪当前步数。当步数耗尽时,默认抛出 GraphRecursionError,但更推荐主动使用 RemainingSteps 状态字段实现优雅退出。

2403_87560480的博客 1447
上一篇: 串匹配算法.BF算法
下一篇: 01背包(动态规划(回溯))
恩嗯
博客等级 码龄8年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值