码迷,mamicode.com
首页 > 其他好文 > 详细

[算法]——汉诺塔的递归深度

时间:2014-08-27 10:43:37      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   div   log   sp   算法   c   计算机   

今天早晨在上班的路上,一好朋友突然提到之前的一个计算机的考题,汉诺塔(相信大家都玩过)的递归深度。

由于很久没有看算法,以及脑容量有限,当时没有多想。

来到公司后,把公式列了一下,终于清晰多了。

下面假设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

 

看来平时还是要经常看下算法方面的书籍,要不就像初高中知识一样被遗忘了。

[算法]——汉诺塔的递归深度

标签:style   blog   color   div   log   sp   算法   c   计算机   

原文地址:http://www.cnblogs.com/lemonbar/p/3938757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!