- 0
- 0
- 约4.03千字
- 约 33页
- 2026-03-10 发布于广西
- 举报
第10课复杂递归
学习目标强化加深对递归的理解和运用运用递归解决复杂的问题学习目标强化加深对递归的理解和运用运用递归解决复杂的问题
知识讲授
汉诺塔问题汉诺塔(河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
汉诺塔问题
问题建模我们可以使用4个参数去描述汉诺塔问题。voidHanoi(intn,chara,charb,charc);n表示移动的是第n号盘子;a,b,c分别表示汉诺塔问题中的三个柱子。我们称a,b,c分别为:起始柱,辅助柱,目标柱。注意a、b、c都必须是变量而不能是常量。思考一下原因?
汉诺塔问题A
递推关系根据游戏规则:想要移动n号盘,则需要先将n-1号盘(其实是n以上所有的盘)从a柱移动到b柱。此时我们的问题变成:Hanoi(n-1,a,c,b);即:将n-1号盘从a柱出发,借助c柱,移动到b柱。在这次移动的过程中a,c,b分别为:起始柱,辅助柱,目标柱。
将n-1号盘子移到b柱之后,我们就可以将n号盘子,直接从a移动到c,即n-1:a-c。到这一步,我们完成了第n号盘子的移动。接下来我们还需要将n-1号盘子(在b柱),移动到c柱上。即:Hanoi(n-1,b,a,c);在这次移动的过程中b,a,c分别为:起始柱,辅助柱,目标柱。递推关系
当问题变成只有一个盘子时,我们就无须借助辅助柱,直接从a移动到c柱即可。边界条件
#includebits/stdc++.husingnamespacestd;voidHanoi(intn,chara,charb,charc){if(n==1){coutn:a-cendl;return;}else{Hanoi(n-1,a,c,b);coutn:a-cendl;Hanoi(n-1,b,a,c);}}intmain(){Hanoi(3,a,b,c);return0;}参考代码
快速排序(Quicksort)快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分(分治法),其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
排序过程初始数组a[]47652311234567第1遍处理时,先取L=1,R=7,key=a[L],i=L,j=R。ij升序排序,以key作为基准,将数组划分成左边都小于等于key,右边都大于等于key的两部分。
初始数组a[]47652311234567先从右往左找,找到第一个比key=4要小的值位置。将a[j]的值赋值给a[i]。ij当ij时,重复如下过程:排序过程
初始数组a[]17652311234567再从左往右找,找到第一个比key=4要大的值位置。将a[i]的值赋值给a[j]。ij排序过程
初始数组a[]17652371234567重复刚才的过程:再从右往左找,找到第一个比key=4要小的值位置。将a[j]的值赋值给a[i]。ij排序过程
初始数组a[]13652371234567从左往右找,找到第一个比key=4要大的值位置。将a[i]的值赋值给a[j]。ij排序过程
初始数组a[]13652671234567从右往左找,找到第一个比key=4要小的值位置。将a[j]的值赋值给a[i]。ij排序过程
初始数组a[]13252671234567从左往右找,找到第一个比key=4要大的值位置。将a[i]的值赋值给a[j]。ij排序过程
初始数组a[]13255671234567从左往右找,找不到比key小的值,i==j时,循环结束,再将key的值,赋值给a[i]。ij排序过程
初始数组a[]13245671234567从左往右找,找不到比key小的值,i==j时,循环结束,再将key的值,赋值给a[i]。ij排序过程
初始数组a[]13245671234567经过第一轮划分,数组被分成{1,3,2,4}和{5,6,7}两个部分,再分别对这两部分执行上述的过程。ij排序过程
#includebits/stdc++.husingnamespacestd;inta[8]={0,4,7,6,
您可能关注的文档
- C++编程《第001课 初识C++》教学设计.docx
- C++编程《第001课 初识C++》教学课件.pptx
- C++编程《第002课 变量和数据类型(1)》教学课件.pptx
- C++编程《第002课 变量和数据类型(1)》教学设计.docx
- C++编程《第003课 变量和数据类型(2)》教学设计.docx
- C++编程《第003课 变量和数据类型(2)》教学课件.pptx
- C++编程《第004课 选择与分支(1)》教学课件.pptx
- C++编程《第004课 选择与分支(1)》教学设计.docx
- C++编程《第005课 选择与分支(2)》教学课件.pptx
- C++编程《第005课 选择与分支(2)》教学设计.docx
- 统编版2025年春季新版七年级下册历史 第21课 明清时期的科技与文化 教案.docx
- 雅安雨城法院书记员招聘考试真题库2025.docx
- 2026届安徽合肥市高考一模高考语文试卷试题(含答案详解).pdf
- 【专题研究】国内外城市更新研究的最新进展.pdf
- 【专题研究】老旧城区改造居民满意度影响因素研究——以遂宁市老旧城区改造为例.pdf
- 【专题研究】关于旧城空间改造理论与创意设计案例的几点思考.pdf
- 西藏拉萨市高三下学期期末物理备考重点详解.docx
- 泾县法院书记员招聘笔试真题2025.pdf
- 2026年春【苏教版】-六年级数学下册-面积的变化.pptx
- 2026年春【苏教版】-六年级数学下册-7.pptx
原创力文档

文档评论(0)