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

C语言进阶指南(6)(函数递归详解)(内含汉诺比,青蛙跳台阶问题)

求f(6)值解法如下:f(6)=f(5)+1=(f(4)+1)+1,以此类推。在数学中,递归是将一个未知项逐渐拆分为小项来计算出未知项值。...我们上面已经知道了递归函数先进栈后出栈特点。那么如果我们在递归过程中调用了太多函数情况下,就会导致先前调用函数无法出栈结果,而此时函数递归也仍未停止。...1;}fib(10)=55.斐波那契数列也很好体现了递归缺点之一就是计算繁杂,如果我们尝试使用fib(50),就会发现程序一直在运行,但是结果要很久才能输出(取决于计算算力)。...我们发现递归fib(50)需要调用250次方次函数才能得到返回值青蛙跳台阶青蛙跳台阶问题如下:有一个青蛙,它一次能跳两个台阶,也可以跳一次台阶,那么当青蛙跳到第n个台阶时,总共有几种跳法。...汉诺比问题想让盘子在最低端由大到小排序,我们需要先将第n个盘子挪到c柱上,那么我们需要先将前边(n-1)个盘子按由大到小规律挪到b柱,接着把第n个盘子挪到c柱,再将(n-1)个盘子挪到c柱完成排序

10510

关于面试总结5-python笔试题(递归)

前言 本篇继续收集一些常见python笔试题,以基础知识为主,递归是面试最喜欢考一个问题,不管是做开发还是测试,都无法避免考递归。本篇结合实际案例,讲下几种关于递归场景。 计算n阶乘 计算n!...求满足规律100以内所以数据 a = 0 b = 1 while b < 100: print(b, end=",") a, b = b, a+b 幂递归 计算xn次方,如:3...x*mi(x, n-1) x = 3 num = 4 print(mi(x, num)) 汉诺问题 汉诺:汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...当A塔上有3个盘子时,先将A塔上编号1至2盘子(共2个)移动到B塔上(需借助C),然后将A塔上3号最大盘子移动到C,最后将B塔上两个盘子借助A移动到C塔上。...当A塔上有n个盘子是,先将A塔上编号1至n-1盘子(共n-1个)移动到B塔上(借助C),然后将A塔上最大n号盘子移动到C塔上,最后将B塔上n-1个盘子借助A移动到C塔上。

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

用例子理解递归

递归函数体中调用自己,在使用递归同时,一定要注意结束条件,如果不加控制,将无休止调用自己,直到堆栈溢回出,因为函数每调用一次就会在栈上创建一个栈帧,函数调用结束后就会弹出该栈帧,而栈大小不是无限...然后想要运用递归,最重重重要口诀,要记住: 明确这个递归函数作用(不需要写出具体代码) 找到递归结束条件 找出函数等价关系式或最小递归模型 不要试图跟踪递归过程 ---- 下面通过运用口诀来解决由易到难几道题来理解递归...这个数列从第3项开始,每一项都等于前两项之和,这个也是在递归中常说一道题。 第一步: 明确这个递归函数作用,这个函数作用是什么?就是输出第n项值。...第一步,确实递归函数作用,求n级台阶有多少种跳法。 第二步,确实结束条件,当台阶等于0,1,2,分别有0,1,2种方法,我们可以将这个结束条件进行整理。...(又称河内)问题,汉诺源于印度一个古老传说益智玩具。

1.1K10

递归求解汉诺问题

前言 博主之前有写过关于递归问题思维模式: 递归思路 下面将用这种思维模式来求解经典汉诺问题。 一、问题描述 汉诺(又称河内)问题是源于印度一个古老传说。...三、解决方案(附代码): 那么问题就很简单了,递归代码就分为两部分:终止条件和递归逻辑。...上一篇博客讲到,我们思考递归问题时候,可以直接把这个大问题拆解成很多个子问题,想象这个功能别人已经写好了(就是这个递归函数),我们做不到功能直接调用这个递归函数就可以(注意逻辑)。...1,B,A,C); } /** * 将编号为n盘子从sourceTower移动到destTower * @param nDisks * @param sourceTower..."+nDisks+"盘子正在从"+sourceTower+"->"+destTower); } 四、示例(n=3时候) 以上就是用宏观思维去进行递归求解汉诺方法,希望大家多多支持哟

40340

汉诺递归太难理解了_函数定义时可以用递归

关于递归: (1)在求f(n, other variables)时候,你就默认f(n -1, other variables)已经被求出来了——至于怎么求,这个是计算机通过回溯求出来。...给了终止条件,计算机才能进行求解子问题并回溯,最终求出f(n) 对于这个汉诺问题,在写递归时,我们只需要确定两个条件: 1.递归何时结束? 2.递归核心公式是什么?...下面正式进入该题: 汉诺问题是一个经典问题。汉诺(Hanoi Tower),又称河内,源于印度一个古老传说。...下面我们来写递归函数。 首先,题目要求求是如何操作,那么我们就必须写一个输出操作语句函数。...:编号,从哪个盘子移动到哪个盘子 那么函数体呢?

72830

递归算法题练习(数计算、带备忘录递归计算函数值)

递归介绍 概念:递归是指函数直接或间接调用自身过程。 解释递归两个关键要素: 基本情况(递归终止条件):递归函数一个条件,当满足该条件时,递归终止,避免无限递归。...可以理解为直接解决极小规模问题方法。递归表达式(递归调用):递归函数语句,用于解决规模更小子问题再将子问题答案合并成为当前问题答案。...递归如何实现 递归函数基本结构如下: 返回类型 函数名(参数列表){ 基本情况(递归终止条件) if(满足终止条件){ 返回终止条件下结果 递归表达式(递归调用) } else if...避免不必要重复计算,尽可能优化递归函数性能(例如使用记忆化)。 递归和循环比较 递归特点: 直观、简洁,易于理解和实现 适用于问题规模可以通过递归调用不断减小情况。...任务: 编写一个程序,根据输入正整数α,计算神秘函数S(α)值。正确解答这道难题将获得通行证,得以进入神秘花园探索知识宝藏。

12610

python练习题-day17

1、计算n!,例如n=3(计算321=6), 求10! 2、已知一个数列:1、1、2、3、5、8、13、。。。。规律为从3开始每一项都等于其前两项和,这是斐波那契数列。...求满足规律100以内所有数据 3、计算xn次方,如:34次方 为3*3*3*3=81 4、汉诺:汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...当A塔上有两个盘子是,先将A塔上1号盘子(编号从上到下)移动到B塔上,再将A塔上2号盘子移动C塔上,最后将B塔上小盘子移动到C塔上。...当A塔上有3个盘子时,先将A塔上编号1至2盘子(共2个)移动到B塔上(需借助C),然后将A塔上3号最大盘子移动到C,最后将B塔上两个盘子借助A移动到C塔上。...当A塔上有n个盘子是,先将A塔上编号1至n-1盘子(共n-1个)移动到B塔上(借助C),然后将A塔上最大n号盘子移动到C塔上,最后将B塔上n-1个盘子借助A移动到C塔上。

42110

《JavaSE-习题篇二》之七个题目,十六张图,让你不惧递归

而在程序中方法或者函数实在栈区开辟内存来使用,栈空间有限,而该print()方法可以无限递归下去,即无限制开辟栈内存,最终栈空间耗尽,会发生栈溢出。...F(0)=0,F(1)=1.当N大于等于2时,F(n)=F(n - 1)+F(n - 2),会一直不断,F(n)=F(n - 1)+F(n - 2),直到F(0)=1,F(1)=1,才会回归,这样计算有大量重复计算...,当N是一个很大数字,计算机就要重复计算很久,为了解决重复计算问题,我们可以使用循环来求斐波纳契数列。...汉诺(Tower of Hanoi),又称河内,是一个源于印度古老传说益智玩具。...如图1至4个台阶跳法种数 设台阶数为n,通过n=1,n=2,n=3,我们可以发现当n>2时,第一次跳时候有两种不同选择,一是第一次仅仅跳1级,此时跳法数目等于后面剩下n-1个台阶跳法数目,即

19510

C语言:函数递归

函数不返回,函数对应栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归 函数调⽤都会开辟属于⾃⼰栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。      ...比如斐波那契数列,当我们使用递归方法就解决时,如果输入50,需要很长时间才能算出结果,因为递归程序会不断展开,在展开过程中会有很多次重复计算,而且递归层次越深,冗余计算就会越来越多。...40个斐波那契数时候,使⽤递归⽅式,第3个斐波那契数就被重复计算了 39088169次,这些计算是⾮常冗余。...2个函数 void Move(char a, char b, int n) { //n代表第几个圆盘,a和b穿得是柱子编号,表示从a柱子挪到b柱子 printf("第%d个圆盘从%c柱挪动到%c柱...-1个圆盘通过a挪动到c上 } } 最后通过这三个函数完成计算汉诺问题挪动次数以及挪动过程!!

11910

基础算法 | 递归世界你不懂.......

对,没错 今天要教给大家是 递(zhuang)归(bi)大法 本节纲要: - 什么是递归 - 递归函数工作原理 - 经典递归问题 - 递归一些适用情况 什么是递归?...运用递归通常可以把一个大型复杂问题层层转化为一个与原问题相似的规模较小问题来求解,从而减少程序代码量。 递归调用形式: -直接调用:即在函数中调用函数本身。...所以就得到结果为6 整个过程大体就是这样函数执行流程: 递归经典问题 汉诺(Hanoi Tower),又称河内,源于印度一个古老传说。...- 当A柱子上有3个盘子时,先将A柱子上编号1至2盘子(共2个)移动到B柱子上(需借助C柱子),然后将A柱子上3号最大盘子移动到C柱子,最后将B柱子上两个盘子借助A移动到C柱子上。...递归函数只有具备了这两个要素,才能在有限次计算后得出结果。 -The End- 编辑 / 邓发珩 指导老师 / 秦时明岳 注:部分资料来源网络。

85160

【Python数据结构与算法】--- 递归算法应用-五行代码速解汉诺问题.

汉诺 两层汉诺演示 三层汉诺走法演示 我不知道有没有朋友跟我一样有一个疑问,如果我们顶端先放到中间柱子呢?...这有点像我们斐波那契数列. 青蛙跳台阶问题相当于动态规划问题 . 动态规划:用上一步结果,来快速计算得到下一步结果....递归思路: 当只有1个台阶时,只有一种跳法;当有2个台阶时,有两种跳法;当台阶数大于2时,青蛙可以选择跳一步到第n-1个台阶,也可以选择跳两步到第n-2个台阶,所以总跳法数是跳到第n-1个台阶跳法数加上跳到第...2 else: return frog_jump(n-1) + frog_jump(n-2) 其中,n表示台阶数,函数返回青蛙跳到第n个台阶跳法数。...需要注意是,这种递归实现虽然简单易懂,但是时间复杂度为指数级别的,所以不能用于大规模数据处理。

11810

C语言-递归和迭代

本节概要 递归概念 递归:函数自己调用自己 控制台运行结果: 递归思想 把一个大型问题层层转换成一个与原问题相似,但规模较小子问题求解;直到子问题不能再被拆分,递归就结束了.--- 大事化小 递归...递归与迭代 虽然递归很好用,但是如果递归深度太深可能会发生栈溢出问题....这是刚刚打印,1234例子,我们通过函数内存中栈区去观察,它是如何进行打印,当执行完所有函数以后我们会发现栈区里会给每一个执行完函数开辟一个空间,直到函数执行完以后,这些空间才会被一个一个释放出来...预告 1.汉诺问题 相传在古印度圣庙中,有一种被称为汉诺游戏。...2.青蛙跳台阶问题 有一只青蛙,一次可以跳一个台阶,也可跳2个台阶如果有n个台阶,这只青蛙有多少种跳法,跳上n个台阶

13110

如何理解分治思想

image.png 相信大家都玩过汉诺吧,那么汉诺是如何来呢? 传说越南河内某间寺院有三根银棒,上串 64 个金盘。...这就是汉诺由来。 算法求解 解法基本思想是递归。假设有 A、B、C 三个,A有N块盘,目标是把这些盘全部移到 C 。...循环赛日程表 青蛙跳台阶问题 分治法复杂性分析 一个分治法将规模为n问题分成k个规模为n/m子问题去解。...用T(n)表示该分治法解规模为|P|=n问题所需计算时间,则有: T(n)= k T(n/m)+f(n) 通过迭代法求得方程解: 递归方程及其解只给出n等于m方幂时T(n)值,但是如果认为T(...1、一定是先找到最小问题规模时求解方法 2、然后考虑随着问题规模增大时求解方法 3、找到求解递归函数式后(各种规模或因子),设计递归程序即可。

43570

两个常用算法day1

1.递归,经典汉诺问题、 河内(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国河内为越战时北越首都,即现在胡志明市;1883年法国数学家...Edouar Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教,是由三支钻石棒所支撑,开始时神在第一根棒上放置64个由上至下依由小到大排列金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒...,且搬运过程中遵守大盘子在小盘子之下原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此将毁损,而也就是世界末日来临之时。...n; printf("请输入盘数: \n"); scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); return 0; } 如果结构化函数...,可以将其中printf放在一个函数中,这样结构更加清晰。

27310

算法之路(四)----汉诺(又称河内

汉诺是很简单也很经典算法之一。 汉诺是根据一个传说形成数学问题: 有三根杆子A,B,C 。A杆上有N个(N>1)穿孔圆盘,盘尺寸由下到上依次变小。...寺院地点众说纷纭,其中一说是位于越南河内,所以被命名为“河内”。另外亦有“金盘是创世时所造”、“僧侣们每天移动一盘”之类背景设定。...佛教中确实有“浮屠”()这种建筑;有些浮屠亦遵守上述规则而建。“河内”一名可能是由中南半岛在殖民时期传入欧洲。 解答 如取N=64,最少需移动264− 1次。...解法 解法基本思想是递归。假设有A、B、C 三个,A有N块盘,目标是把这些盘全部移动到C。那么先把塔顶部N-1块盘移动到B,再把A剩下大盘移动到C,最后把BN-1块盘移动到C。...递归解 以Objective-C语言实现: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after

1.4K20

c语言从入门到实战——函数递归

函数递归 前言 函数递归是指一个函数直接或间接地调用自身,以解决问题一种方法。在C语言中,函数递归可以用来计算阶乘、斐波那契数列等数学问题。...其实递归程序会不断展开,在展开过程中,我们很容易就能发现,在递归过程中会有重复计算,而且递归层次越深,冗余计算就会越多。...40个斐波那契数时候,使用递归方式,第3个斐波那契数就被重复计算了 39088169次,这些计算是非常冗余。...有时候,递归虽好,但是也会引入一些问题,所以我们一定不要迷恋递归,适可而止就好。 拓展学习: 青蛙跳台阶问题 汉诺问题 青蛙跳台阶问题 题目描述: 一只青蛙可以跳上1级台阶,也可以跳上2级台阶。...汉诺问题 汉诺问题是一道经典递归问题,其描述为:有三个柱子,分别为A、B、C,A柱子上有N个大小不同盘子,大在下,小在上。

15510

重磅好文 | 看动画轻松理解「递归」与「动态规划」

程序员小吴打算使用动画形式来帮助理解「递归」,然后通过「递归概念延伸至理解「动态规划」算法思想。 什么是递归 先下定义:递归算法是一种直接或者间接调用自身函数或者方法算法。...1Sum(arr[n-1...n-1] ) = arr[n-1] + Sum([]) 二.汉诺问题 汉诺(Hanoi Tower)问题也是一个经典递归问题,该问题描述如下: 汉诺问题:古代有一个梵...从递归到动态规划 还是以 爬台阶 为例,如果以递归方式解决的话,那么这种方法时间复杂度为O(2^n),具体计算可以查看笔者之前文章 《冰与火之歌:时间复杂度与空间复杂度》。...相同颜色代表着 爬台阶问题 在递归计算过程中重复计算部分。 ?...每一次迭代,都会计算出多一级台阶走法数量。迭代过程中只需保留两个临时变量 a 和 b ,分别代表了上一次和上上次迭代结果。为了便于理解,引入了temp变量。temp代表了当前迭代结果值。

55710

Hanoi问题

说明:河内(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国河内为越战时北越首都,即现在胡志明市;1883年法国数学家 Edouard Lucas...曾提及这个故事,据说创世纪时Benares有一座波罗教,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒...,且搬运过程中遵守大盘子在小盘子之下原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此将毁损,而也就是世界末日来临之时。...1至n-1圆盘移到B,C作辅助 printf("Move sheet %d from %c to %c\n", n, A, C); hanoi(n-1, B, A,...C); //将B上编号为1至n-1圆盘移到C,A作辅助 } } int main() { int n; printf("请输入盘数:"); scanf("%d"

60560

看动画轻松理解「递归」与「动态规划」

程序员小吴打算使用动画形式来帮助理解「递归」,然后通过「递归概念延伸至理解「动态规划」算法思想。 什么是递归? 先下定义:递归算法是一种直接或者间接调用自身函数或者方法算法。...Sum(arr[n-1...n-1] ) = arr[n-1] + Sum([]) 二.汉诺问题 汉诺(Hanoi Tower)问题也是一个经典递归问题,该问题描述如下: 汉诺问题:古代有一个梵...从递归到动态规划 还是以 爬台阶 为例,如果以递归方式解决的话,那么这种方法时间复杂度为O(2^n),具体计算可以查看笔者之前文章 《冰与火之歌:时间复杂度与空间复杂度》。...相同颜色代表着 爬台阶问题 在递归计算过程中重复计算部分。 ?...每一次迭代,都会计算出多一级台阶走法数量。迭代过程中只需保留两个临时变量 a 和 b ,分别代表了上一次和上上次迭代结果。为了便于理解,引入了temp变量。temp代表了当前迭代结果值。

62020

秒懂 | 看动画轻松理解「递归」与「动态规划」

程序员小吴打算使用动画形式来帮助理解「递归」,然后通过「递归概念延伸至理解「动态规划」算法思想。 什么是递归 先下定义:递归算法是一种直接或者间接调用自身函数或者方法算法。...1Sum(arr[n-1...n-1] ) = arr[n-1] + Sum([]) 二.汉诺问题 汉诺(Hanoi Tower)问题也是一个经典递归问题,该问题描述如下: 汉诺问题:古代有一个梵...从递归到动态规划 还是以 爬台阶 为例,如果以递归方式解决的话,那么这种方法时间复杂度为O(2^n),具体计算可以查看笔者之前文章 《冰与火之歌:时间复杂度与空间复杂度》。...相同颜色代表着 爬台阶问题 在递归计算过程中重复计算部分。 ?...每一次迭代,都会计算出多一级台阶走法数量。迭代过程中只需保留两个临时变量 a 和 b ,分别代表了上一次和上上次迭代结果。为了便于理解,引入了temp变量。temp代表了当前迭代结果值。

76200
领券