通过一个简单的数学游戏,清晰了解各大编程语言之间的一些区别

时间:2019-08-11 12:00:01 来源:企业在线 当前位置:鱼趣外围足球365网址_外围网站 365_玩365外围有什么枝 > 书籍 > 手机阅读

Linux编程
点击右侧关注,免费入门到精通!


作者丨娇兮心有之


我想很多人在小时候都玩过这么一个游戏,我记得以前的摩托罗拉的手机里面就有,那就是汉诺塔!



看到图片是不是想起来玩过这个游戏呢?


汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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?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');
????}
}


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);
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入门的,毕竟对新手还是非常的友好的!


虽然它们的语法可能是存在一些差异,但是实现效果的逻辑思维还是一样的呀,所以一法通万法通!


最后再说一句(主要针对那些杠精^.^)


这并没有说专门棒哪个编程语言,也没有说贬低哪个编程语言,因为每一个编程语言都有自己的特点以及擅长的领域,Python代码特点就是简洁,这个是我们不能反驳的。


每一个编程语言都有其擅长的领域,比如:


Java擅长的领域:


网页, 企业级开发, 普通应用软件, 游戏后台


C/C++擅长的领域:


C: 系统底层, 驱动, 嵌入式开发.


C++: 游戏开发, 大规模, 高性能, 分布式要求的程序开发。


PHP擅长的领域:


网络前端,用于生成网页。也可以整个web服务器都用php,比如很多论坛引擎。


Python擅长的领域:


服务器开发与物联网开发。信息安全,大数据处理,数据可视化机器学习,物联网开发,各大软件的api,桌面应用


相关文章:

书籍本月排行

书籍精选