首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法--递归--走台阶问题(2种递归+递归循环

递归: 一个问题可以分解成若干子问题,且求解思路一样,当到一定的情况下有终止条件,这样的问题可以用递归方法求解 注意事项: 递归调用深度太大,栈空间会耗尽溢出 注意避免调用中某些值的重复计算(见以下代码...3) 递归,频繁调用函数,时间成本高(见以下代码1) 递归代码可以改成循环代码 (见以下代码2) 问题1 给你 n 个台阶,你的最大步幅是2步,可以一次走1步,也可以一次走2步,问有多少种走法?...<< endl; return 0; } 以上递归方法,在 n 比较小的时候运行时间较短 输入 n = 100 时,超过10s还没出结果,我就终止程序了。以下改用循环。...2.循环代码 #include using namespace std; int main() //循环 { unsigned long n, step, nextStep...<< endl; } return 0; } 输入 n = 100 时,改用循环,眨眼间出结果。 ?

1.8K20

for循环递归、回溯

目录: 1.简单递归定义 2.递归循环的区别与联系 3.递归的经典应用 1.简单递归定义 什么叫递归?...说对了一半,不过递归是一种思想,现在还暂时不能说透,需要大家先比较一下循环递归的相同点和不同点(饭一口一口吃,别着急) 2.递归循环的区别于联系 相同点: (1)都是通过控制一个变量的边界(或者多个...简单的来说就是:用循环能实现的,递归一般可以实现,但是能用递归实现的,循环不一定能。...这是一个循环只注重循环次数的常见例子,我们知道,用循环有点无从下手(就目前作者水平来看),但是递归就很好写了。 汉诺塔,什么鬼,我不会啊? 别急,慢慢来。...(2)递归可以是多个“递”,也可以是多个“归”;而循环由始至终都只由一个变量控制(就算有几个变量同时控制)也只有一个出口,每次循环也只是一个“递”。

1.2K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【说站】java循环递归的区别

    java循环递归的区别 说明 1、一般递归调用可以处理的算法,也通过循环去解决常需要额外的低效处理 。 2、 现在的编译器在优化后,对于多次调用的方法处理会有非常好的效率优化,效率未必低于循环。...循环 优点: 结构简单 缺点: 并不能解决所有的问题。 有的问题适合使用递归而不是循环,如果使用循环并不困难的话,最好使用循环。...递归     优点: 代码简洁、清晰,并且容易验证正确性 缺点: 它的运行需要较多次数的方法调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响。...但是,对于某些问题,如果不使用递归,那将是极端难看的代码。 以上就是java循环递归的区别,希望对大家有所帮助。

    61330

    递归改成循环_递归循环效率高吗

    Java递归递归循环 为什么大家都说不建议用递归?...递归容易造成栈溢出,在jdk1.5前虚拟机给每个栈桢的运行空间128kb,在1.5以后为1m的运行空间.递归是指先进后出,也就是说第一进栈的对象会最后一个出站,然后栈桢的空间只有1m,生产环境的数据需要递归的深度...一个简单的例子测试递归的深度 递归的使用注意点 1.注意递归的结束条件 递归的优势 代码简单清晰,一看就懂,如果在不会照成栈溢出还是建议使用递归的。 所有的递归都可以循环吗?理论上是可以的。...以下一个嵌套递归循环的例子 嵌套递归:工作要求需要将一个集合中有subList的对象的code记录一下,无subList对象的code记录在一起 //递归查到所有的drugtypes //嵌套递归...hasChildCodeList,hasNotChildCodeList); }else { hasNotChildCodeList.add(drugType.getCode()); } } } 嵌套递归循环

    58210

    beego web提高后端速度的尝试——循环查询数据库为递归算法

    https://blog.csdn.net/hotqin888/article/details/80530311 最开始对付项目列表中的每个项目的成果数量,采用查询数据库,循环去查,因为一个项目下面有...因为:要么循环查询数据库,要么把所有项目目录category表一次性查出来(15.6万),把所有成果product表一次性查出来(beego orm默认只会查出1000个结果来),再循环——递归。...v.Title aa[0].Label = v.Label aa[0].Principal = v.Principal //取得项目所有成果——速度太慢 //修改为一次性取到所有成过,然后循环赋值给...count = count + 1 } } slice := getsons(v.Id, categories) // 如果遍历的当前节点下还有子节点,则进入该子节点进行递归...还是采用递归

    1.3K20

    循环递归与魔术(一)——递归循环的数理逻辑

    循环递归本是程序设计中常见的两种代码结构,其中循环对应的数学描述为迭代,递归即为嵌套自身。而二者共同的特性在于必须存在一种跳出机制:循环必有break,而递归必有对最简单情况的直接求解的返回。...我们首先看一下基本定义: 循环循环是程序设计语言中反复执行某些代码的一种计算机处理过程,常见的有按照次数循环和按照条件循环递归:程序调用自身的编程技巧称为递归,必须包括自调用和跳出条件。...而这个定义在逻辑上其实有两层理解: 循环递归的数理逻辑 在人脑概念层面,循环是一个结构类似对象的序列,本身是一个线性结构,没有纵深的层次嵌套。...循环递归的程序逻辑 上面是人脑对循环递归结构的抽象理解。然而所谓放心地解决,是指的只要把问题逻辑理清楚,转化为循环或者递归逻辑就能够写成代码执行,但执行本身是编译器的事,高级语言可以不关心。...故有些编译器会自动把递归等价成循环,可以证明,递归循环之间是可以相互转换的。只不过把部分编译器的工作在高级语言中自己代替而已。

    1.4K21

    SQL递归实现循环判断

    SQL递归实现循环判断 以前的文章Python小案例(五)循环判断进行分组介绍了如何使用python解决循环判断的问题。现在重新回顾一下这个问题背景:有一列按照某规则排序后的产品,想打包进行组合售卖。...直到最近看了一篇关于SQL递归查询的文章,躁动的DNA又动了~ SQL递归查询简介 首先,简单介绍下什么是SQL递归查询。...递归查询是通过CTE(表表达式)来实现,至少包含两个查询,第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点;第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发...fibonacci where st < 10 ) select * from fibonacci image-20230225161256619 利用SQL递归实现循环判断...从上面的案例我们知道,每次调用自己的时候做一些判断就能实现循环判断了。

    2.6K20

    python中函数递归VS循环

    3.解决问题的思路 以前写过的For循环 举例:输出1-10所有的数字。...for i in range(1,11): print(i) 视频内容 ---- 本节知识视频教程 以下开始文字讲解 一、函数递归的实现 函数是否可以做到类似于循环?...我们可以采用函数的递归算法。 什么是递归? 可以理解为在定义的函数内部调用函数自己,形成一个回路。既然形成了一个回路,那么必须要有一个退出的方式。而这种退出的方式一般都是采用条件判断来实现的。...=10*9*8*…*2*1 (此题答案在本文最后公布) 二、总结强调 1.掌握递归的定义方法。 2.掌握递归的注意事项。 3.掌握递归与for循环的联系与区别。...本节代码: #for循环举例 # for i in range(1,11): # print(i) #利用函数递归来输出1-1000之间的数字 import sys #导入sys库 sys.setrecursionlimit

    1.7K30

    循环递归、分治、回溯、动态规划

    一、循环(重复) 不断的重复、有始有终 循环实现 private loop(){ for(start; end; loop termination){ expression1; expression2...---- 特征:自相似性、有始有终 实现:归去来兮、适可而止 何时想到递归?...子问题与原始问题做同样的事 递归实现: private void recursion(int level,int param1,int param2...):{ // 终止条件(recursion...在这两种情况下,它都是指通过递归的方式将复杂问题分解为更简单的子问题来简化它。虽然有些决策问题不能用这种方式分解,但是跨越多个时间点的决策通常会递归地分解。...) 自低向上 以斐波那契数列为例: F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2)(N >= 2) 递归(傻递归): 若计算F(4);需计算 lin1 F(4

    56320

    递归循环的效率迷思

    本文简单比较了一下相同逻辑下,递归实现和循环实现的效率差异 已经不记得最初是从哪里获取的信息了,自己总有一个印象是递归的效率比循环差,因为递归有很大的函数调用开销,再加上递归可能存在的堆栈溢出问题...64% 左右了 ~ 试验到现在,似乎都印证了我之前的印象: 递归循环慢,写代码就要写循环~ 我们最后来看个真实的(也更复杂的)示例:查找指定名字的子节点(假设我们有一颗树形结构的节点树,给出根节点,...,似乎我们应该将之前的递归代码改写为这种循环形式,但是 Profile 之后发现,其实循环版本还略慢于递归版本,原因就在于(模拟)调用栈的引入抵消了(甚至超过了)函数调用的开销....还有一个问题之前没有提及,就是代码可读性问题,从我个人经验来讲,递归代码的可读性大体上还是要优于循环代码的....结论 一般而言,将递归代码改写为循环代码可以提高效率,但是一旦改写过程中引入了堆操作,那么结果往往是相反的.

    1.4K20

    别人Bug 系列《递归中使用Return 问题》

    { return false; } } return true; }; 调用 isEqual发现函数永远返回 true 原因分析: ---- 看了代码发现,小G同学使用了递归...递归其实是一层套一层的。 如果在第一层函数里,调用这个函数,其实在内存第二个函数在第一个函数的作用域里。return 同样原理,你需要一层一层才能从第一层退出去。...代码中只是从最后一次递归的时候退出了这次函数,并没有全部退出,所以函数走完并没有return ,永远调用最后的 return true 解决方案: ---- 按照递归逻辑一层一层返回即可。...也就是在递归的时候return 出去这一层 return isEqual(obj1[attr], obj2[attr]); // 递归的时候return 出去 修改之后: // 判断对象是否相等 const...== obj2[attr]) { return false; } } return true; }; 总结: ---- 基础知识递归掌握不熟练引起,另外在项目中油很多方法判断

    27410
    领券