算法学习之旅,中级篇(7)-–递归之汉诺塔
2017-09-02 21:05
393 查看
介绍
诺塔(又称河内塔)问题是源于印度一个古老的传说的益智玩具。
大梵天在创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片圆盘,大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上,并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
分析
1,先将A上n-1个盘通过C移动到B
2,再将A剩下的一个盘移动到C
3,最后将B盘上的n-1个盘通过A移到C
代码
遇到的问题
没有问题。
诺塔(又称河内塔)问题是源于印度一个古老的传说的益智玩具。
大梵天在创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片圆盘,大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上,并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
分析
1,先将A上n-1个盘通过C移动到B
2,再将A剩下的一个盘移动到C
3,最后将B盘上的n-1个盘通过A移到C
代码
#include<stdio.h> void move(int n,char a,char b,char c) { if(n==1) //当只有一个的时候直接从a移动到c printf("\t%c->%c\n",a,c); else { //第n-1个要从a通过c移到b move(n-1,a,c,b); printf("\t%c->%c\n",a,c); //n-1个移动过来后,b通过a移动到c move(n-1,b,a,c); } } int main() { int n; printf("请输入要移动的块数:"); while(scanf("%d",&n)!=EOF) { move(n,'a','b','c'); } return 0; }
遇到的问题
没有问题。
相关文章推荐
- 算法学习之旅,中级篇(5)-–递归之杨辉三角
- 算法学习之旅,中级篇(6)-–递归之斐波拉契数列
- 算法学习——递归之汉诺塔
- 算法学习之递归--汉诺塔问题
- 算法学习之旅,中级篇(8)-–分治之二分搜索(递归)
- 算法与数据结构学习 03 递归和堆栈
- 【学习笔记】算法竞赛:chapter 3 & 4 数组、字符串;函数、递归
- 零基础入门学习Python(24)--递归:汉诺塔
- 算法(递归)--汉诺塔
- 算法学习之递归--表达式计算(简单计算器)
- 算法学习之递归--爬楼梯问题
- 【从零学习经典算法系列】分治与递归2——主方法
- [算法]——汉诺塔的递归深度
- 【数据结构与算法】汉诺塔算法——java递归实现
- 递归和分治思想3|汉诺塔 – 数据结构和算法33
- 算法实战学习之递归(1)
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- java数据结构和算法学习之汉诺塔示例
- 算法学习之旅,中级篇(2)-–插入排序
- 数据结构与算法学习笔记之高效、简洁的编码技巧“递归”