算法学习——递归之汉诺塔
2018-10-28 15:24
295 查看
算法描述
汉诺塔问题
如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
算法思路
1个盘的时候,只需要移动1次即可达成目标,
g(1) = 1
)(步骤一)2个盘的时候,需要移动3次即可达成目标,
g(2) = 3
(步骤二)3个盘的时候,我们需要将底下较大的两个盘先移动到C中,之后再将A中剩下的那个盘移动到C中。
这里需要注意的是,我们是将底下的2个盘当做了一个,所以是相当于进行了2次步骤二
需要2*g(2)次
之后就是步骤一的那种情况 ,
需要1次移动
g(3)=2*g(2)+1
通式为
g(n)=2*g(n-1)+1
递归出口为
n=1
算法实现
System.out.println("请输入盘片数:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.close(); long result = han(n); System.out.println("总移动次数为"+result); } public static long han(int n){ long s; if(n==1){ s=1; }else{ s =2*han(n-1)+1; } return s; }
结果
相关文章推荐
- 算法学习之旅,中级篇(7)-–递归之汉诺塔
- 算法学习之递归--汉诺塔问题
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 递归:汉诺塔 - 零基础入门学习Python024
- 递归 汉诺塔问题 Java数据结构与算法
- 汉诺塔算法学习笔记
- 算法设计和数据结构学习_6(单链表的递归逆序)
- 汉诺塔,递归初步算法。
- 递归转非递归学习三:汉诺塔问题
- 学习到栈的时候,利用函数递归调用解决汉诺塔
- Python学习(三):迭代器、生成器、装饰器、递归、算法、正则
- 递归和迭代算法 [汉诺塔问题]
- 算法----汉诺塔的递归实现
- C#算法学习-->递归
- 汉诺塔:非递归,非堆栈,使用C语言完成。希望多多交流,学习。
- 算法学习笔记之三:八皇后问题(递归、回溯)
- Java实现汉诺塔 -- JAVA 算法学习
- 预排序遍历树算法(非递归无限极分类算法)学习笔记
- 经典算法学习——非递归遍历二叉树
- 20150410 递归实现汉诺塔算法