[所有分类]第3章函数2.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[所有分类]第3章函数2

递推函数(补充内容) 递推函数(补充内容) 递推函数(补充内容) 递推函数(补充内容) 递归函数及其实现 int main() // 主函数 { // 主程序开始 int n; // 整型变量,n为盘数, cout 请输入盘数 n=; // 提示信息 cin n; // 输入正整数n cout 在3根柱子上移 // 输出提示信息 n 只盘的步骤为:endl; move(n,a,b,c); // 调用move函数 return 0; // 主函数结束 } // 以下函数是被主程序调用的函数 // 函数名:move // 输 入:m,整型变量,表示盘子数目 // p,q,r为字符型变量,表示柱子标号 // 返回值:无 void move(int m, char p, char q, char r) { // 自定义函数体开始 if (m==1) // 如果m为1,则为直接可解结点 { // 输出移盘信息 cout [“ step ] move 1# from “ p to “ r endl; step++; // 步数加1 } else // 如果不为1,则要调用move(m-1) { move(m-1,p,r,q); // 递归调用move(m-1) //直接可解结点,输出移盘信息 cout [ step ] move m # from p to rendl; step++; // 步数加1 move(m-1,q,p,r); // 递归调用move(m-1) } } //自定义函数体结束 这里用与或结点的含义是分解为(1)(2)(3)步。这3步是相关的,相互依存的,而且是有序的,从左至右执行。 move(n, A, B, C) 分解为3步 (1)move(n-1, A, C, B)理解为将上面的n-1只盘子作为一个整体从A经C移至B; (2)输出n:A to C,理解为将n号盘从A移至C,是直接可解结点; (3)Move(n-1, B, A, C)理解为将上面的n-1只盘子作为一个整体从B经A移至C。 这里显然是一种递归定义,当着解 move(n-1, A, C, B)时又可想到,将其分解为 3 步: 第1步:将上面的n-2只盘子作为一个整体从A经B到C,move(n-2, A, B, C); 第2步:第n-1号盘子从A直接移至B,即n-1:A to B; 第3步:再将上面的n-2只盘子作为一个整体从C经A移至B,move(n-2, C, A, B); 下面,我们还是以3只盘子为例画出递归的与或图。 // ******************************************* // * 程 序:6_hanoi2002.cpp * // * 作 者:wuwh * // * 编制时间:2002年10月13日 * // * 主要功能:用递归求解Hanoi问题 * // ******************************************* #include iostream // 预编译命令 using namespace std; int step=1; // 整型全局变量,预置1,步数 void move(int, char, char, char); // 声明要用到的被 调用函数 // 以下函数是被主程序调用的函数 // 函数名:move // 输 入:m,整型变量,表示盘子数目 // p,q,r为字符型变量,表示柱子标号 // 返回值:无 void move(int m, char p, char q, char r) { // 自定义函数体开始 if (m==1) // 如果m为1,则为直接可解结点, { // 直接可解结点,输出移盘信息 cout[step] move

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档