龙空技术网

「答案」python每日一题20201126(汉诺塔)

编程皮皮糖 127

前言:

目前同学们对“python核心编程答案”大概比较注意,看官们都需要分析一些“python核心编程答案”的相关资讯。那么小编在网络上网罗了一些关于“python核心编程答案””的相关资讯,希望各位老铁们能喜欢,咱们一起来学习一下吧!

汉诺游戏规则如下:

1、有三根相邻的柱子,标号为A,B,C。

2、A柱子上从下到上按金字专塔状叠放着n个不同大小的属圆盘。

3、现在把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

要求输入盘子的数量,输出所有移动步骤。

【起源】

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。

大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

【解析】

如果我们把游戏初始记录为hn(n,A,B,C),表示n个盘子从A借助于B移动到C,则该问题我们可以这么看:

(1)只需先把n-1个盘子从A借助于C移动到B,记为hn(n-1,A,C,B)

(2)再把第n个盘子移动到C

(3)最后把n-1个盘子从B借助于A移动到C,记为hn(n-1,A,C)

怎么样?是不是理解起来一点都不费力?一个n阶的汉诺塔游戏,实际上是由2步n-1阶汉诺塔游戏构成的。大规模问题简化成了小规模问题,问题当中套相同问题,这是什么思想呢?

对了,这就是递归。特别地,在程序中,我们把函数调用函数叫做递归(也可以间接调用)。所以设计出一个解决汉诺塔游戏的递归函数,问题就全部解决了。

def hn(n,s_from,s_help,s_to):        if n==1:#只有一个盘子的情况就不需要辅助物了,直接移动                print(s_from,'-->',s_to)        else:                hn(n-1,s_from,s_to,s_help)#步骤1                print(s_from,'-->',s_to)#步骤2                hn(n-1,s_help,s_from,s_to)#步骤3n=int(input("请输入汉诺塔游戏的盘子数:"))hn(n,'A','B','C')                        

标签: #python核心编程答案