马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 kernelkernel 于 2017-4-7 10:38 编辑
关于小甲鱼第24讲中,游戏汉若塔的代码,怎么都想不明白究竟原理是怎样的。只能求助于各位大神,帮我解疑惑!小弟菜
先看看正确的代码:def hanoi(n , x , y , z):
if n == 1 :
print ( x , ' 到 ' , z )
else:
hanoi ( n - 1 , x , z , y )
print ( x , ' → ' , z )
hanoi ( n - 1 , y , x , z )
n = int(3)
hanoi ( n , '左' , '中', '右' )
输出的结果:
左 到 右
左 → 中
右 到 中
左 → 右
中 到 左
中 → 右
左 到 右
这个是正确的代码和输出结果。 当中我无法理解,整个递归的顺序步骤,程序是如何执行的,也就是每一行的输出结果应该对应哪一行代码
有两位热心网友进行初步解答,可惜小弟才疏学浅无法理解透彻。然后对代码进行更改看能否更好地理解程序的步骤。经过改动,以下的输出结果是按照我的思路去输出的结果。没错,结果显然是错误的。但是,我的思路就是这样的,为什么正确的结果中,会有右到左呢?明明程序都没写过这样的结果。
以下是我更改过后的错误输出结果程序,但是思路却是按照我对程序的理解的顺序执行的。
代码如下:def hanoi(n , x , y , z): #建立函数
if n == 1 : #判断是否等于1,等于1就是trun(真)
print ( x , ' 到 ' , z ) #输出结果
else: #不等于1的时候执行调用自身直到输出上面的结果
hanoi ( n - 1 , ' 我是左边', '我是右边' , '我是中间' ) #重新定义参数,同时次减一,避免死循环;
print ( x , ' → ' , z ) #输出结果,但是我不明白这个结果为什么会被执行
hanoi ( n - 1 , '我系中间的' , '我系左边的' , '我系右边的' ) #当输出的是三,那么第一次执行的话,这里会是多少减一呢?(n=?减一)
n = int(3) #假设是三而已,如果是四,五,六呢?
hanoi ( n , '左' , '中', '右' ) #这个是得到具体赋值后调用hanoi函数,同时赋予了后三个具体的参数。
------------------------------------------------------------
结果输出如下:
我是左边 到 我是中间
我是左边 → 我是中间
我系中间的 到 我系右边的
左 → 右
我是左边 到 我是中间
我系中间的 → 我系右边的
我系中间的 到 我系右边的
-----------------------------------------------------------------
希望有高手能详细说明,整个程序的工作流程及步骤。 |