我想很多人在小時候都玩過這麼一個遊戲,我記得以前的摩托羅拉的手機裡面就有,那就是漢諾塔!
漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下麵開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤
今天除了用程式語言解決這個簡單數學問題以外,小編還發現其實實現同一個東西,使用不同的程式語言,可以看出它們之間的相似之處以及一些區別,接下來就看看各大程式語言是如何實現的吧。
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')
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);
}
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);
}
}
}
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');
}
}
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');
var m:integer;
procedure move(getone,putone:char);
begin writeln(getone,'->',putone) end;
procedure hanoi(n:integer;one,two,three:char);
begin
if n=1 then move(one,three) else
begin
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three)
end
end;
begin
readln(m);
write('the step to moving disks:');
writeln;
hanoi(m,'A','B','C')
end.
透過上面的實現程式碼,我們很容易發現,Python語言的使用程式碼量是最少的,也是最為簡潔的,並沒有那麼多的()和{},所以對於很對想要學習程式語言的小夥伴們,小編是非常建議大家學習Python入門的,畢竟對新手還是非常的友好的!
雖然它們的語法可能是存在一些差異,但是實現效果的邏輯思維還是一樣的呀,所以一法通萬法通!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援