首页 > 代码库 > [算法]——汉诺塔的递归深度
[算法]——汉诺塔的递归深度
今天早晨在上班的路上,一好朋友突然提到之前的一个计算机的考题,汉诺塔(相信大家都玩过)的递归深度。
由于很久没有看算法,以及脑容量有限,当时没有多想。
来到公司后,把公式列了一下,终于清晰多了。
下面假设3根柱子编号为1,2,3.
主要思路:
把n个圆盘从3号移到1号 = 把n-1个圆盘从3号移到2号 + 把第n个圆盘从3号移到1号 + n-1个圆盘从2号移到1号
列出公式:
f(n) = f(n-1) + 1 + f(n-1) = 2f(n-1) + 1
计算公式:
接下来就是数学题了, 利用等比数列。
并且f(1) = 1,因为移动一个圆盘
f(n) = 2*f(n-1) + 1 = 2*(2f(n-2) + 1) + 1 = 2^2f(n-2) + 1 + 2 = ... = 2^(n-1)f(1) + 1 + 2^2 + 2^3 + ... + 2^(n-2) = 2^(n-1) + 2^(n-1) - 1 = 2^n - 1
看来平时还是要经常看下算法方面的书籍,要不就像初高中知识一样被遗忘了。
[算法]——汉诺塔的递归深度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。