- 18
- 0
- 约 14页
- 2016-12-07 发布于湖北
- 举报
第*页/共15页 软件综合项目开发训练实验6 迭代汉诺塔游戏 李伟键 weijianlee@126.com 递归 递归:函数f()直接调用自己,或通过另一函数g()间接调用自己。 f(){ | f(){ g(){ …… | …… …… f(); | g(); f(); …… | …… …… } | } } 使用递归函数的两个条件 一个大的问题可以逐步转化为一个或多个小的类似问题,直到简化为一个简单问题; 递归有明确的终止条件。 递归的使用 求解n的阶乘n! n! = n×(n-1)×(n-2)×...×2×1 = n×(n-1)! int factorial ( int num ){ if ( num = 1 ) return 1; else return num * factorial( num -1 ); } void main(){ int sum = factorial(10); printf(10!等于%d, sum); } 迭代(循环) 迭代算法是对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 使用循环结构体:for / while / do while…… 迭代的三个条件: 确定迭代变量; 建立迭代关系式; 对迭代过程进行控制:迭代次数,或者条件测试 迭代的使用 求解n的阶乘n! n! = n×(n-1)×(n-2)×...×2×1 = n×(n-1)! void main(){ int i, sum = 1; for ( i =n; i=1; i--){ sum = i * sum; } printf(n!等于%d, sum); } 递归vs迭代 递归程序更直接,更好理解,编程更简单; 递归程序的实现比迭代程序的实现需耗费更多的时间和空间。 因此,在具体实现的实现,尽可能把递归程序转化为迭代程序。 并非所有的递归程序都有对应的迭代程序; - 尾递归:递归作为最后一条语句,并且仅此一个递归调用。可以直接转化为迭代(如求n!的递归); - 非尾递归,无法直接转化,需要通过使用堆栈,来实现递归。 递归转化为迭代 把递归算法转化为非递归算法有如下三种基本方法: (1)通过分析,跳过分解过程,直接用循环结构的算法实现求值过程; (2)递归为尾递归,直接转化为迭代算法; (3)自己用栈模拟系统的运行时栈,通过分析只保存必须保存的信息,从而用非递归算法替代递归算法。 汉诺塔问题 有三根杆子(命名为A、B和C)。A杆上N(N1)个穿孔的圆盘,盘的尺寸由下到上依次变小。 要求按照如下规则将A杆上的所有圆盘移至C杆上: 每次只能移动一个圆盘; 大盘不能叠在小盘下面。 汉诺塔游戏 基本思路 移动n个圆盘的基本思路 将n-1个盘子从A杆移动B杆,在此过程中可使用C杆作为临时存放区; 将最后一个盘子(最大)从A杆移动C杆; 将n-1个盘子从B杆移动C杆,在此过程中可使用A杆作为临时存放区。 移动n-1个圆盘的思路同移动n个圆盘。 当n=1时,过程结束。 迭代思路(1/2) 1.recursion_hano(n-1,A,C,B); // 将 上 n-1 个圆盘移动到 B上 2.moveAC(n, A,C); //将最大的圆盘移动到 C上 3.recursion_hano(n-1,B,A,C); //将B上的圆盘移动到C上 先把1移完,再移2,最后再移3。 移1时,又是:先把1移完,再移2,最后再移3。 …… 可以看出,如上符合一个堆栈的特点:后入先出。 入栈顺序:3,2,1。接着出栈,1。处理1:入栈3,2,1… 迭代思路(2/2) 使用一个堆栈来存放函数参数,对这些函数参数,依次调用函数recursion_hano或者moveAC来处理: 如果是recursion_hano函数,依次把3.recursion_hano(n-1,B,A,C) 、2.moveAC(n, A,C)和1.recursion_hano(n-1,A,C,B)入堆栈 如果是moveAC函数,直接移动,也就是屏幕打印出移动某圆盘,从x柱到y柱。 函数参数要存放入堆栈,需要为ElemType声明一个结构体,结构体内放入所需的各种参数(n,num, A,B,C): n:要移动的盘子最大编号 num:移动盘子个数 - 如果num为1,则为moveAC - 如果num=n,则为recursion_hano A,B,C:移动的柱子编号 A-C,B为中转 编码思路 初始化堆栈S 依次把(n-1, n-1
您可能关注的文档
- 完成-中国医药跨境电商模式.doc
- 威信车站1号多线大桥施组.docx
- 夏季施工方案-(淮南).doc
- 孝感高中2015—2016学年度高二上学期期中考试物理试题[来源:学优高考网308236].doc
- 孝义市市民服务中心卸料平台施工方案修改后(含计算书及附图).doc
- 实验三_验证地址解析协议ARP的工作过程.docx
- 实习安全知识学习.ppt
- 室内巧用Antler chandelier鹿角吊灯,自由的模样.docx
- 实验室试验项目基本了解.ppt
- 学当小医生教学课件.ppt
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- 黑龙江省园林绿化工程消耗量定额2024版.docx VIP
- N—乙酰氨基葡萄糖合成方法的改进.pdf VIP
- L-CKC L-CKC 220工业闭式齿轮油 工业润滑剂 220 说明书.pdf
- 2025年春人教版历史七年级下册全册教学课件.pptx
- 自考14653《证券投资理论与实务》高频考点串讲.docx VIP
- 2026年湖南安全技术职业学院单招职业技能考试题库及完整答案详解一套.docx VIP
- 新城商开事业部产品配置标准及成本控制手册(2020版).pdf VIP
- 四川大学《通信原理》期末试题B卷.docx VIP
- 2024年度实验室CNAS内审全套资料.pptx VIP
- 2026年度护理人员培训计划(两篇).docx VIP
原创力文档

文档评论(0)