本文目录
- python汉诺塔非递归
- 汉诺塔python
- 求python大神帮忙解释一下 这个汉诺塔程序的步骤
- python利用递归解决汉诺塔问题,求大神解释一下代码
- 如何理解这段汉诺塔python代码中的递归
- python语言汉诺塔(hanoi)问题
- python请用递归算法编程解决汉诺塔问题 在线等
- 标题:用Python编码描述汉诺塔步骤
- python汉诺塔算法如何添加统计移动次数的代码
- python 递归汉诺塔求解代码问题
python汉诺塔非递归
python汉诺塔非递归,运用list和function知识的解答
无论stack还是recursion都是从汉诺塔的原理去解决问题,但如果已经想清楚汉诺塔的原理,其实只用把答案print出来就行了
先找规律:
一层:A--》C
两层:A--》B
-------
A--》C
-------
B--》C
三层:A--》C
A--》B
C--》B
-------
A--》C
-------
B--》A
B--》C
A--》C
注意到n层汉诺塔有(2**n) - 1 个步骤,而中间的一步(两个分割线之间)都是“A--》C”,中间的这一步将这一层汉诺塔的解分为上下两个部分
仔细观察,上面一部分是将上一层的解中所有的B,C交换,下面一部分是将上一层的解中所有的A,B交换
例如第二层是:
A--》B
A--》C
B--》C
第三层上部分就将第二层的解的C换成B,B换成C,即得出:
A--》C
A--》B
C--》B
第三层下部分就将第二层的解的A换成B,B换成A,即得出:
B--》A
A--》C
C--》B
这个规律同样适用于第一层,和以后的所有层
然后就好办了,代码如图:
代码
其中convertAB,convertBC就是AB交换,BC交换的函数,这两个函数可以自己定义,用中间变量即可
汉诺塔python
Solves the Towers of Hanoi problem on n discs. The discs are labeled
* in increasing order of size from 1 to n and the poles are labeled
* A, B, and C.
*
* % java Hanoi 3
* Move disc 1 from A to C
* Move disc 2 from A to B
* Move disc 1 from C to B
* Move disc 3 from A to C
* Move disc 1 from B to A
* Move disc 2 from B to C
* Move disc 1 from A to C
以上为模拟结果,从结果中找递归规律,你的疑点也能得到解决
求python大神帮忙解释一下 这个汉诺塔程序的步骤
def my_print(args):
print args
def move(n, a, b, c):
my_print ((a, ’--》’, c)) if n==1 else (move(n-1,a,c,b) or move(1,a,b,c) or move(n-1,b,a,c))
注释:汉诺塔模型输入move (n, ’a’, ’b’, ’c’)
例如n=3
move(2,a,c,b)自循环
move(1,a,b,c)
move(2,b,a,c) 自循环
循环完毕,输出
你这段代码也是类似自循环
python利用递归解决汉诺塔问题,求大神解释一下代码
这是一个典型的递归程序
当只有一层的时候,直接把x放到z上结束
当大于1层的时候,先把x和z放到y上,然后继续递归
把y放到x上,然后放到z上,结束处理
如何理解这段汉诺塔python代码中的递归
递归方法有些时候是不太好理解,不过递归的意义就是把解决问题n变成解决n-1的问题,最终变成解决1个问题。
假设有n个盘子,从上到下依次编号,最下面的盘子编号是大写的N。托盘分别是x,y,z。要把所有盘子从x移动到z。
前面几行代码就不解释了,很容易理解。
第五行,如果只有一个盘子,就直接从x移动到z。
第七行,如果不只一个盘子,先把上面n-1个盘子从x移动到y。
第八行,再把N号盘子从x移动到z。
第九行,再把刚才那n-1个盘子从y移动到z。
至于那n-1个盘子是怎么移动的,再次调用这个函数,把问题变成n-2个盘子加1个盘子的问题。
python语言汉诺塔(hanoi)问题
move(n, A, B) 就表示把第n个饼从A柱移到B柱, 其中step是个全局变量,用来记录移动的次数。
hanoi(n, A, B, C) 就是你所问的实现递归的函数, 表示把n个饼从A柱通过B柱移到C柱。
其中 n==1 是递归的最基本的情况, 如果只有一个饼就直接移到目标柱子即可。
不然呢我们就先把最上面n-1个饼从A通过C移到B,注意这里移到的是B柱哦~, 然后把第n块饼移到C柱,再重新把之前移到B柱上的n-1个饼通过A移动到C。
整个过程挺直白的,想通了就明白了
python请用递归算法编程解决汉诺塔问题 在线等
这是Python3系统自带的一个例子,估计就是这个意思,本来他是6个盘子,按照你要求改成4个了。递归算法没问题,描述也非常详细 ;)
#!/usr/bin/env python3
from turtle import *
class Disc(Turtle):
def __init__(self, n):
Turtle.__init__(self, shape=“square“, visible=False)
self.pu()
self.shapesize(1.5, n*1.5, 2) # square--》rectangle
self.fillcolor(n/6., 0, 1-n/6.)
self.st()
class Tower(list):
“Hanoi tower, a subclass of built-in type list“
def __init__(self, x):
“create an empty tower. x is x-position of peg“
self.x = x
def push(self, d):
d.setx(self.x)
d.sety(-150+34*len(self))
self.append(d)
def pop(self):
d = list.pop(self)
d.sety(150)
return d
def hanoi(n, from_, with_, to_):
if n 》 0:
hanoi(n-1, from_, to_, with_)
to_.push(from_.pop())
hanoi(n-1, with_, from_, to_)
def play():
onkey(None,“space“)
clear()
try:
hanoi(6, t1, t2, t3)
write(“press STOP button to exit“,
align=“center“, font=(“Courier“, 16, “bold“))
except Terminator:
pass # turtledemo user pressed STOP
def main():
global t1, t2, t3
ht(); penup(); goto(0, -225) # writer turtle
t1 = Tower(-250)
t2 = Tower(0)
t3 = Tower(250)
# make tower of 6 discs
for i in range(4,0,-1):
t1.push(Disc(i))
# prepare spartanic user interface ;-)
write(“press spacebar to start game“,
align=“center“, font=(“Courier“, 16, “bold“))
onkey(play, “space“)
listen()
return “EVENTLOOP“
if __name__==“__main__“:
msg = main()
print(msg)
mainloop()
标题:用Python编码描述汉诺塔步骤
#-*- coding:utf-8 -*-
count = 0
def hano():
def hanoi(n,x,y,z):
global count
count += 1
if n == 1:
print(’Monving %d’ % n, ’from ’,x,’to’,z)
else:
hanoi(n-1,x,z,y)
print(’Monving %d’ % n, ’from ’,x,’to’,z)
hanoi(n-1,y,x,z)
return hanoi
n = int(input(“请输入汉诺塔的层数 :“))
hano()(n,’source’,’helper’,’target’)
print(“The total number of steps required is: “,str(count))
-----------分-割-线-是-我----------------
复制分割线以上的代码,保存为hannoi.py,在python 3 下运行,得到结果如题所示。
python汉诺塔算法如何添加统计移动次数的代码
方案1:命令窗口运行文件方式
s=0
def move(n,a,b,c):
global s
if n==1:
s=s+1
print(a,’--》’,c)
return
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
n = int(input(’num: ’))
move(n,’A’,’B’,’C’)
print(’total: %s’%s)
方案2:交互模式(建立函数文件jichu.py,在交互窗口调用文件中函数move)
s=0
def move(n,a,b,c):
global s
if n==1:
s=s+1
print(a,’--》’,c,’\t%s’ % s)
return
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
python 递归汉诺塔求解代码问题
报错意思是变量n没有被定义。
你把层数传给hanoi了。
把hanoi=(int(input(’请输入汉诺塔层数’)))里的hanoi改为n就行了,其他不用改