古印度“汉诺塔”益智玩具递归算法运用二。经典程序员面试题

古印度“汉诺塔”益智玩具递归算法运用二。经典程序员面试题

首页休闲益智乐高汉诺塔更新时间:2024-07-28

博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试、笔试中经常问的问题,欢迎大家关注。一起学习,一起成长。

汉诺塔故事背景:

汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。

降阶分析

这个模型有点复杂,我们可以先模拟一下,假设三个金刚柱分别为ABC,且初始化情况下所有的黄金圆盘均在柱子A上。

一阶汉诺塔:

A remove 到 C

一共花了:1步!

二阶汉诺塔:

A remove 到 B

A remove 到 C

B remove 到 C

一共花了:3步!

三阶汉诺塔:

A remove 到 C

A remove 到 B

C remove 到 B

A remove 到 C

B remove 到 A

B remove 到 C

A remove 到 C

一共花了:7步!

从结果以上模型中可以分析出高阶的汉诺塔可以低阶化,三阶后面三步骤和二阶一致,二阶最后一步和一阶一致。

代码示例

31层汉诺塔代码示例

为什么不写32层呢?谁知道?

领悟与感想

那么到底要多少步骤呢?作者试了一下32阶,执行了20分钟还未出结果,可像而知,64个圆盘移完真不知道要后年马月了。

答案究竟是多久呢,准确的来说是2的64次方减一次,假设一秒一次,昼夜不停,584,942,417,需要355年26天7小时15秒,可像而知古印度人的智慧。

-------------

写的不好,如果大家有更高的见解欢迎评论。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved