|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def hanoi(n,x,y,z):
if n==1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y)#将前n-1个盘子移动到y上
print(x,'-->',z)#将最后的移动到z上
hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上
这几段代码完全不明白啊
不知道为什么会这么写:
我打个比方
例如我输入
hanoi(3,'a','b','c')
出现以下的形式:
a --> c
a --> b
c --> b
a --> c
b --> a
b --> c
a --> c
谁能解释一下函数是怎么运行的吗?
例如:
hanoi(3,'a','b','c')。
因为n<>1
所以执行
hanoi(2,'a','c','b')
因为你n<>1
所以执行
hanoi(1,'a','b','c')
n=1
所以输出a->c
后面就搞不懂了?
这个问题想了好几天了都弄不懂,谁能帮帮我啊
我想先说一句话,递归的好处就是能让你忽略处理问题的细节,仔细纠结它是如何处理问题的我认为没必要,只要你有解决方案,在利用递归把问题解决了就好了,以下是你想知道的代码运行过程:
hanoi(3,a,b,c)先执行hanoi(2,a,c,b),后执行print(a-->c),再执行hanoi(2,c,a,b),为了简单表示,我把它简化成:
(3,a,b,c)>(2,a,c,b)>print(a-->c)>(2,c,a,b);
其中(2,a,c,b)>(1,a,b,c)>print(a-->b)>(1,c,a,b)
其中(1,a,b,c)>print(a-->c);(1,c,a,b)>print(c-->b)
我这里就写到hanoi(2,a,c,b)
|
|