设为首页 加入收藏

TOP

2.5 组织数据(2)
2014-03-11 13:03:04 来源: 作者: 【 】 浏览:108
Tags:2.5 组织 数据

2.5  组织数据(2)

这个递归解决方案遵循了前面递归解决方案的一些基本模式:

1. 通过解决其他塔问题来解决原始塔问题。

2. 其他塔问题比原始塔问题小;需要移动的圆盘少。准确地讲,每次递归调用使圆盘个数减1。

3. 当问题只有一个圆盘时(即基例),可直接得到解。

4. 这种使问题不断减小的方式确保最终到达基例。

注释:Hanoi塔问题的解决方案符合递归解决方案的4个标准

为解决塔问题,需要递归地解决很多圆盘数更少的问题。图2-17显示了在解决3个圆盘问题时的递归调用及其调用顺序。

注释:3个圆盘的解决方案

现在考虑此算法的C++实现。由于目前大多数计算机没有手臂,因此该函数通过下达指令来移动圆盘。这样,表示标杆的形参是char类型,相应实参为'A'、'B'和'C'。调用solveTowers(3, 'A', 'B','C')生成以下输出:
 

  1. Move top disk from pole A to pole B  
  2. Move top disk from pole A to pole C  
  3. Move top disk from pole B to pole C  
  4. Move top disk from pole A to pole B  
  5. Move top disk from pole C to pole A  
  6. Move top disk from pole C to pole B  
  7. Move top disk from pole A to pole B 

C++函数如下所示:
 

  1. void solveTowers(int count, char source, char destination, char spare)  
  2. {  
  3. if (count == 1)  
  4. {  
  5. cout    << "Move top disk from pole " << source 
  6. << " to pole " << destination << endl;  
  7. }  
  8. else  
  9. {  
  10. solveTowers(count - 1, source, spare, destination);     // X  
  11. solveTowers(1, source, destination, spare);                                 // Y  
  12. solveTowers(count - 1, spare, destination, source);     // Z  
  13. } // end if  
  14. }           // end solveTowers 

问题9 跟踪solveTowers函数的执行,解决两个圆盘的Hanoi塔问题。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.5 组织数据(1) 下一篇2.6.1 Fibonacci数列(兔子繁殖)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)