iOS(Object C)解答汉诺塔问题 | 递归经典--汉诺塔问题

汉诺塔问题是最经典的递归思想

题目:

 “大梵天”创造世界的时候做了三根金刚石柱子(A、B、C),在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。“大梵天”命令“婆罗门”把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。

 要求:小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
问:64片圆盘移动完毕需要多少时间??

先说答案:64片圆盘柱子移动完毕就是世界毁灭之时!!!!!!!

解答:

我们假设有N个圆盘,则把原盘看出2部分

第一部分:第N个圆盘(也就是底部最大的那个圆盘)

第二部分:(N-1) 个圆盘

问题就简单化了,我们只需要做做三步就可以完成移动

1.将N-1个盘子从A柱子(经过C柱子)移动到B柱子

2.将第N个盘子从A柱子移动到C柱子

3.将N-1个盘子从B柱子(经过A柱子)移动到C柱子

因为一次只能移动1个盘子,所以除了步骤2;步骤1和步骤3,需要再细分成步骤1,2,3;

这样就形成了递归.

Object C的代码为:

/*
 n: n个盘子
 StartPoint:起点柱子
 Passby:经过的柱子
 EndPoint:结束的柱子
 */

- (void)hanoiMove:(int)n StartPoint:(NSString *)a Passby:(NSString *)b EndPoint:(NSString *)c
{
    if (n == 1)
    {
        //第2部
        NSLog(@"移动第 %d 个盘子 从 %@ 到 %@\n",n,a,c);
    }else{
        //第1步
        [self hanoiMove:n-1 StartPoint:a Passby:c EndPoint:b];
        NSLog(@"移动第 %d 个盘子 从 %@ 到 %@\n",n,a,c);
        //第3步
        [self hanoiMove:n-1 StartPoint:b Passby:a EndPoint:c];
    }
}

我们假设只有3个圆盘(N=3),来验证一下代码的准确性:

    [self hanoiMove:3 StartPoint:@"A" Passby:@"B" EndPoint:@"C"];
    
    /*
     假如n=3,给盘子从上到下,依次编号1.2.3; 则3个盘子的移动顺序为
     移动第 1 个盘子 从 A 到 C
     移动第 2 个盘子 从 A 到 B
     移动第 1 个盘子 从 C 到 B
     移动第 3 个盘子 从 A 到 C
     移动第 1 个盘子 从 B 到 A
     移动第 2 个盘子 从 B 到 C
     移动第 1 个盘子 从 A 到 C
     与下边的代码打印结果一致
     */

控制台打印输出:假设移动一个圆盘需要1秒,3个圆盘则需要7秒; 64个圆盘需要N万秒, 感性起的朋友可以尝试一下10个圆盘或者20个圆盘,看看多次秒...千万不要轻易尝试64个圆盘,你的电脑可能会卡

相关推荐

  1. 问题III

    2024-04-23 13:40:07       30 阅读
  2. -python

    2024-04-23 13:40:07       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 13:40:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 13:40:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 13:40:07       82 阅读
  4. Python语言-面向对象

    2024-04-23 13:40:07       91 阅读

热门阅读

  1. 从零开始精通RTSP之深入理解RTCP协议

    2024-04-23 13:40:07       43 阅读
  2. 基于spring boot开发的快递管理系统开题报告

    2024-04-23 13:40:07       32 阅读
  3. 使用selenium调用firefox提示Profile Missing的问题解决

    2024-04-23 13:40:07       33 阅读
  4. 【前端】vue.config.js打包时不编译

    2024-04-23 13:40:07       34 阅读
  5. vue中如何控制一个全局接口的调用频率

    2024-04-23 13:40:07       37 阅读
  6. ui_admin_vue3启动

    2024-04-23 13:40:07       31 阅读
  7. 图片 组件 vue2+element

    2024-04-23 13:40:07       35 阅读
  8. 谈谈 vue 生命周期

    2024-04-23 13:40:07       35 阅读
  9. python输入输出特殊处理

    2024-04-23 13:40:07       40 阅读
  10. 单链表(详解)

    2024-04-23 13:40:07       29 阅读
  11. 腾讯云开通幻兽帕鲁服务器需要多少钱?30元

    2024-04-23 13:40:07       38 阅读
  12. 回归决策树的构建

    2024-04-23 13:40:07       32 阅读
  13. 【Camera Sensor Driver笔记】七、点亮指南之Flash

    2024-04-23 13:40:07       36 阅读