博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汉诺塔-递归实现
阅读量:6069 次
发布时间:2019-06-20

本文共 2341 字,大约阅读时间需要 7 分钟。

汉诺塔(Hanoi)

        汉诺塔,又叫河内塔,是源于印度古代的一个传说。传说神在创造世界的时候做了三根金刚石柱子,并在一个教塔里留下了三根金刚石棒,第一根上面从上到下套着64个按从小到大排列的金盘,神命令庙里的众僧将它们一个个地从这根金刚石棒搬到另一根金刚石棒上,大盘不能放在小盘上。最后64个金盘仍然要按从小到大排列。如下图所示:

           

C语言

#include 
using namespace std; template
void hanoi(char a, char b, char c){ hanoi
(a, c, b); printf("%c -> %c\n", a, c); hanoi
(b, a, c);}template<>void hanoi<1>(char a, char b, char c){ printf("%c -> %c\n", a, c);}template
class hanoi1{public: static int hanoi(){ hanoi1
::hanoi(); printf("%c -> %c\n", a, c); hanoi1
::hanoi(); }};template
class hanoi1<1, a, b ,c>{public: static int hanoi(){ printf("%c -> %c\n", a, c); }};int main(){ #define N 4 cout<<"类模板偏特化:"; hanoi1
::hanoi(); cout<
('A','B','C'); exit(0);}

Java

public class Hanoi {    /**    *     * @param n 盘子的数目    * @param origin 源座    * @param assist 辅助座    * @param destination 目的座    */    public void hanoi(int n, char origin, char assist, char destination) {        if (n == 1) {            move(origin, destination);        } else {            hanoi(n - 1, origin, destination, assist);            move(origin, destination);            hanoi(n - 1, assist, origin, destination);        }    }     // Print the route of the movement    private void move(char origin, char destination) {        System.out.println("Direction:" + origin + "--->" + destination);    }     public static void main(String[] args) {        Hanoi hanoi = new Hanoi();        hanoi.hanoi(3, 'A', 'B', 'C');    }}

C#

using System; class HANOI{    private static int time = 0;     static void Main(string[] args)    {        Hanoi(3, "x", "y", "z");        Console.WriteLine(time + " Times");        Console.ReadKey();    }     public static void Hanoi(int n, string x, string y, string z)    {        if (n == 1)        {            Console.WriteLine(x + "--->" + z);            time++;        }        else        {            Hanoi(n - 1, x, z, y);            Hanoi(1, x, y, z);            Hanoi(n - 1, y, x, z);        }    }}

JavaScript

var hanoi=function(n,from,ass,to){  if(n>0){    hanoi(n-1,from,to,ass);    move(n,from,to);    hanoi(n-1,ass,from,to);  }}var move=function(n,from,to){ console.log("移动第"+n+"个从"+from+"到"+to);}hanoi(3,"A","B","C");

 

转载地址:http://fgygx.baihongyu.com/

你可能感兴趣的文章
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Fundebug前端JavaScript插件更新至1.6.0,新增test()方法用于测试
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
复杂业务下,我们为何选择Akka作为异步通信框架?
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>