[算法]——汉诺塔的递归深度
2014-08-27 09:44
274 查看
今天早晨在上班的路上,一好朋友突然提到之前的一个计算机的考题,汉诺塔(相信大家都玩过)的递归深度。
由于很久没有看算法,以及脑容量有限,当时没有多想。
来到公司后,把公式列了一下,终于清晰多了。
下面假设3根柱子编号为1,2,3.
并且f(1) = 1,因为移动一个圆盘
看来平时还是要经常看下算法方面的书籍,要不就像初高中知识一样被遗忘了。
由于很久没有看算法,以及脑容量有限,当时没有多想。
来到公司后,把公式列了一下,终于清晰多了。
下面假设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
看来平时还是要经常看下算法方面的书籍,要不就像初高中知识一样被遗忘了。
相关文章推荐
- 汉诺塔,递归初步算法。
- 6261:汉诺塔问题(2.2基本算法之递归和自调用函数)
- 机试算法讲解: 第43题 递归之汉诺塔问题
- 汉诺塔 算法(递归和非递归算法)
- 【数据结构与算法】汉诺塔算法——java递归实现
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
- 一个连通图,采用邻接表作为存储结构,设计一个算法从顶点v出发的深度优化遍历的非递归过程
- 经典算法1:递归求解汉诺塔
- 迷宫问题的算法(优于递归、深度优先、广度优先)
- 百度面试题——简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 算法 - 递归 - 汉诺塔问题
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 汉诺塔问题递归算法分析
- 用栈代替递归-汉诺塔问题(算法基础 第3周)
- 算法学习之递归--汉诺塔问题
- 递归和分治思想3|汉诺塔 - 数据结构和算法33
- 【算法导论】图的创建,深度优先访问,广度优先访问(递归/非递归)
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点