Discuss / Python / 汉诺塔的核心思想——递归函数的核心

汉诺塔的核心思想——递归函数的核心

Topic source

# -*- coding: utf-8 -*-

import sys

def move_info(a,b):

    print(a,'--->',b)

#-----------------------------------------------------------------------------

#  个人理解 汉诺塔游戏 核心思想 

#  01 游戏目的--本位圆柱+目标圆柱+空闲圆柱  ,从本位到目标的实现

#  02 游戏规则--保证 小圈永远在大圈之上,空闲圆柱的目的 要不然一步就可以完成了

#  03 核心思想:关注当下每一个问题,这就是递归思想。什么意思:关键来了,永远盯着当下每一个问题的目标圆柱+空闲圆柱,不要盯着最终的目标圆柱,记住永远不要在意你最终的目标,它只是目标对你现在问题毫无疑义!

#  04 游戏开始:你的世界现在只有两个问题需要思考,现在目标圆盘是什么,直接移动是否可以,如果违背游戏规则,立刻启动空闲圆柱过度!

#  05 简化逻辑:目标圆柱,是否矛盾,启动空闲,目标圆柱,是否矛盾,启动空闲。(这里多说一句,启动空闲之后,空闲圆柱就是你当下的目标圆柱了)

#  06 上述思想核心就是递归的核心,专注当下的每一个过程,不断迭代!

#-----------------------------------------------------------------------------

def move_game(n,a,b,c):

    if n == 1:

        move_info(a,c)

    else:

        move_game(n-1,a,c,b)

        move_info(a,c)

        move_game(n-1,b,a,c)

def Usage():

    print("python move.py <num>  ")

if __name__ == '__main__':

    if len(sys.argv) < 2:

        Usage()

        sys.exit(1)

    move_game(int(sys.argv[1]),'A','B','C')

    num = 2**int(sys.argv[1]) -1 

    print(num)


  • 1

Reply