第二周 项目3 汉诺塔程序
来源:互联网 发布:大数据 涂子沛 下载 编辑:程序博客网 时间:2024/05/20 20:05
此问题即为汉诺塔系列问题中的最经典问题
在解决问题的过程中,整体思想还是非常重要的;举个例子,若有n个盘子,它的移动步骤是这样的:先将(n-1)个盘子借助第三根柱子移动到第二根柱子上,然后我们将最下面那个最大的盘子直接移动到第三根柱子上,最后我们借助第一根柱子将第二根柱子上的(n-1)个盘子移动到第三根柱子上!
* *Copyright (c) 2017, 烟台大学计算机学院 *All rights reserved. *文件名称:wer.cpp *作 者:杨合进 *完成日期:2017年9月20日 *版 本 号:v1.0 * *问题描述:汉诺塔问题(计算移动n个盘子需要移动的次数) *输入描述:盘子数目n *程序输出:见程序运行截屏 */ #include <stdio.h> #define discCount 32 long long move(long long, char, char,char); int main() { long long count; count=move(discCount,'A','B','C'); printf("%d个盘子需要移动%I64d次\n", discCount, count); return 0; } long long move(long long n, char A, char B,char C) { long long c1,c2; if(n==1) return 1; else { c1=move(n-1,A,C,B); c2=move(n-1,B,A,C); return c1+c2+1; } }
盘子越多,需要移动的次数越来越多。
因为盘子需要移动的次数实在太大了,它超过了32位整形数所能表示的数据范围(32位整形数所能表示的最大数是2147483647,这个数刚好是盘子数为31时所需要移动的次数!所以当盘子数为32时再用32位整形数就不行了。)
当我将可表示数据的范围扩大为64位后问题就迎刃而解了!
知识点总结:使用了递归的思想,虽然递归思想在有些时候不是很好理解,但它的应用却是非常广泛的!
学习心得:
递归是一个很有趣的方法,有许多地方都会用到递归(比如DFS),学习的过程中需要细心和耐心
阅读全文
0 0
- 第二周项目3—汉诺塔程序
- 【第二周】项目3-汉诺塔程序
- 第二周 项目3 汉诺塔程序
- 第二周项目3—汉诺塔程序(2)
- 第二周 项目3(2) - 体验复杂度-汉诺塔程序
- 第二周项目3(2)---汉诺塔程序
- 第二周项目三—汉诺塔程序
- 第二周项目简短程序
- 第二周项目简短程序
- 第二周项目3-汉诺塔
- 第二周-项目3-汉诺塔
- 第二周项目3--汉诺塔
- 第二周项目三C/C++汉诺塔程序
- 第二周项目3---程序的多文件组织
- 第二周项目 3 程序的多文件组织
- 第二周项目3-程序的多文件组织
- 第二周项目3的程序1——复杂度
- 第二周 项目3的程序——复杂度
- python学习历程_类(day5)
- jQuery-子元素过滤选择器
- Android Error in Eclipse: “Unable to execute dex: Cannot merge new index 66904 into a non-jumbo inst
- java互联网架构-Mybatis缓存机制
- 解决struts2以GET方式提交表单中文乱码问题
- 第二周 项目3 汉诺塔程序
- leetcode 200. Number of Islands DFS深度优先遍历
- Android JNI开发(3)--引用类型
- struts2架构中核心对象的探索—— ActionContextClearUp
- 数据库中Any和All区别
- hexo建站详解----jade 。swig。ejs模板使用 hexo favicon设置
- Websocket(一)简单的demo实现
- Caused by:Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
- swiper 定位到指定页面或位置