• 汉诺塔问题


      我们在学习递归时,总会认识一个问题,那就是汉诺塔问题,问题很简单,A,B,C三根柱子,将盘子移来移去,要求小盘子必须在大盘子的上面,最后将所有盘子从一个柱子移动到另一个柱子;那么我们看只有一根柱子的时候

    很简单直接将从from移动到to,不用借助中间的helper柱子;

    那么此时有n个盘子;其实我们将问题想得抽象和简单点,那就是将前n-1个盘子,从from移动到helper上,借助我们的to,因为这时候我们才能拿到最下面的n第个盘子,并将其移动到to上面,剩下的n-1个盘子,我们同样抽象一点,将其从helper上直接移动到to上,此时借助的是from柱子;

    分析可得:我们一共只需要三步

    step1:将n-1个盘子从from移动到helper上,借助to

    step2:将第n个盘子从from移动到to

    step3:将n-1个盘子从helper上移动到to

    所以有代码(python):

    #!/usr/bin env python3
    # -*- coding:utf-8 -*-
    def hanoi(n,fromwhere,to,helper):#注意这里的参数代表什什么意思啊,最后一个参数时helper啊
        if n == 1:
            move(fromwhere,to)
            return
        hanoi(n-1,fromwhere,helper,to)
        move(fromwhere,to)
        hanoi(n-1,helper,to,fromwhere)
    
    def  move(fromwhere,to):
            print(""+fromwhere+"移动到"+to)
  • 相关阅读:
    Spring 源码学习
    Feign Client 原理和使用
    算法基础:排序算法看这一篇就够了
    Spring 源码学习2
    Spring 源码学习
    最优包裹组合-贪心算法
    @Transactional 事务的底层原理
    Mysql索引扫盲总结
    snowflake原理解析
    分布式ID总结
  • 原文地址:https://www.cnblogs.com/numen-fan/p/7753703.html
Copyright © 2020-2023  润新知