- 1、本文档共105页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
相传古代印度布拉玛神庙中有一个僧人,他每天不分白天黑夜,不停地移动那些圆盘,据说,当所有64个圆盘全部从一根杆上移到另一根杆上的那一天就是世界的末日。故汉诺塔问题又被称为“世界末日问题”。 玩汉诺塔游戏/flash/293_1.htm 看视频:/v_show/id_XMjU0MzU0NDQ0.html 可执行的程序 int i=0; /* 移动圆盘数量计数器 */ main( ) { unsigned n; scanf (%d, n); movedisc ( n,‘a’,‘b’,‘c’); /* 将A上的N个圆盘借助C将移动到B上 */ printf( \t Total: %d\n, i ); } movedisc ( n, fromneedle, toneedle, usingneedle ) unsigned n; char fromneedle, toneedle, usingneedle; { if ( n == 1 ) printf(%2d-(%2d): %c == %c\n, ++i, n, fromneedle, toneedle); else { movedisc ( n-1, fromneedle, usingneedle, toneedle ); printf(%2d-(%2d): %c == %c\n, ++i, n, fromneedle, toneedle); movedisc ( n-1, usingneedle, toneedle, fromneedle ); } } 看程序演示 * 以n!解释递归调用: 1. 进入TC环境,先用非递归(循环的方法)求解10!。 解决几个易错的问题: 程序中储存结果的变量先说明为int型,(long型) 函数说明为int型,(long型) 改正以上错误后,函数内结果对,主函数显示错误。 主调函数未对被调函数说明。 单步执行时观察变量 s(结果)、i+1。 2. 改为递归调用算法,在写程序过程中解释: 什么是自己调自己? 强调不是简单的复制,每次调用参数是不同的。 递归调用结束的条件。 单步执行时观察变量每次的参数n的值。 注意怎么返回的。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 以n!解释递归调用: 1. 进入TC环境,先用非递归(循环的方法)求解10!。 解决几个易错的问题: 程序中储存结果的变量先说明为int型,(long型) 函数说明为int型,(long型) 改正以上错误后,函数内结果对,主函数显示错误。 主调函数未对被调函数说明。 单步执行时观察变量 s(结果)、i+1。 2. 改为递归调用算法,在写程序过程中解释: 什么是自己调自己? 强调不是简单的复制,每次调用参数是不同的。 递归调用结束的条件。 单步执行时观察变量每次的参数n的值。 注意怎么返回的。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10的阶乘的递归过程: 10!= 10 * 9! 9!= 9 * 8! 8!= 8 * 7! 7!= 7 * 6! 6!= 6 * 5! 5!= 5 * 4! 4!= 4 * 3! 3!= 3 * 2! 2!= 2 * 1! 1!= 1 * 0! 0!= 1 1 = 1 1 = 2 2 = 6 6 = 24 24 = 120 120 = 720 720 = 5040 5040 = 40320 40320 = 362880 362880 = 3628800 递推算法求解过程: 1!= 1 2!= 1*2 = 2 3!= 2*3 = 6 4!= 6*4 = 24 5!= 24*5 = 120 6!= 120*6 = 720 7!= 720*7 = 5040 8!= 5040*8 = 40320 9!= 40320*9 = 362880 10!= 362880*10 = 3628800 第五模块 计算机程序设计基础 第四节 基本算法 6.2 算法与算法设计 例:汉诺塔问题 汉诺塔(Hanoi)问题是一个著名的问题,其来源据说是在约19世纪末欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔,游戏的目的是
您可能关注的文档
最近下载
- 2022年注册测绘师法律法规重点记忆手册.pdf
- 玻璃雨棚施工方案.docx VIP
- 四川省达州市大竹县中考二模数学试题含解析.docx VIP
- 沪教牛津版六年级下册英语沪教牛津版Module4测试卷.docx VIP
- 2024-2025学年度甘肃省合作市中考数学真题分类(一次函数)汇编专项测试练习题(解析版).docx
- (初中数学)典型中考数学动点问题试题专题复习讲解汇总.doc VIP
- 护理读书的报告范文的共篇.doc VIP
- 沪教牛津版六年级下册英语沪教牛津版期末测试卷.docx VIP
- 国家开放大学《建筑工程质量检验》章节测试参考答案.pdf
- 四川省达州市大竹县2025年初三最后一考数学试题试卷含解析.doc VIP
文档评论(0)