我想很多人在小时候都玩过这么一个游戏,我记得以前的摩托罗拉的手机里面就有,那就是汉诺塔!
看到图片是不是想起来玩过这个游戏呢?
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘
今天除了用编程语言解决这个简单数学问题以外,小编还发现其实实现同一个东西,使用不同的编程语言,可以看出它们之间的相似之处以及一些区别,接下来就看看各大编程语言是如何实现的吧。
Python
def hanoi(n, a, b, c):if n == 1:
print(a, '-->', c)else:
hanoi(n - 1, a, c, b)
print(a, '-->', c)
hanoi(n - 1, b, a, c)# 调用
hanoi(5, 'A', 'B', 'C')
C
#include #include void Hanoi(int n, char a,char b,char c);void Move(int n, char a, char b);int count;int main(){int n=8;printf("汉诺塔的层数:\n");scanf(" %d",&n);
Hanoi(n, 'A', 'B', 'C');
sleep(20000);return 0;
}void Hanoi(int n, char a, char b, char c){if (n == 1)
{
Move(n, a, c);
}else
{
Hanoi(n - 1, a, c, b);
Move(n, a, c);
Hanoi(n - 1, b, a, c);
}
}void Move(int n, char a, char b){
count++;printf("第%d次移动 Move %d: Move from %c to %c !\n",count,n,a,b);
}
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);
}
}
}
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 movementprivate 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');
}
}
PHP
<?php function hanoi($n,$x,$y,$z){if($n==1){
move($x,1,$z);
}else{
hanoi($n-1,$x,$z,$y);
move($x,$n,$z);
hanoi($n-1,$y,$x,$z);
}
}function move($x,$n,$z){echo'movedisk'.$n.'from'.$x.'to'.$z.'
';
}
hanoi(10,'x','y','z');?>
Pascal
var m:integer;procedure move(getone,putone:char);begin writeln(getone,'->',putone) end;procedure hanoi(n:integer;one,two,three:char);beginif n=1 then move(one,three) elsebegin
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three)endend;begin
readln(m);write('the step to moving disks:');
writeln;
hanoi(m,'A','B','C')end.
通过上面的实现代码,我们很容易发现,Python语言的使用代码量是最少的,也是最为简洁的,并没有那么多的()和{},所以对于很对想要学习编程语言的小伙伴们,小编是非常建议大家学习Python入门的,毕竟对新手还是非常的友好的!
虽然它们的语法可能是存在一些差异,但是实现效果的逻辑思维还是一样的呀,所以一法通万法通!
最后再说一句(主要针对那些杠精^.^)
这并没有说专门棒哪个编程语言,也没有说贬低哪个编程语言,因为每一个编程语言都有自己的特点以及擅长的领域,Python代码特点就是简洁,这个是我们不能反驳的。
每一个编程语言都有其擅长的领域,比如:
Java擅长的领域:
网页, 企业级开发, 普通应用软件, 游戏后台
C/C++擅长的领域:
C: 系统底层, 驱动, 嵌入式开发.
C++: 游戏开发, 大规模, 高性能, 分布式要求的程序开发。
PHP擅长的领域:
网络前端,用于生成网页。也可以整个web服务器都用php,比如很多论坛引擎。
Python擅长的领域:
服务器开发与物联网开发。信息安全,大数据处理,数据可视化机器学习,物联网开发,各大软件的api,桌面应用
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持