感觉自己逻辑思维能力不行啊 题目都搞不懂
看不懂看不懂
看不懂看不懂
2018-10-31
当n=1时,函数执行到return就截止,结果为a-->c,同时也得出move(1,x,y,z)的结果为x-->z(为了防止混淆,用另外三个字母代替变量)。
当n=2时,if条件不满足,则跳过if函数块,执行后面的语句,即move(1,a,c,b),根据move(1,x,y,z)的结果,这个地方会得到a-->b。紧接着执行print语句,得到a-->c。后面又执行move(1,b,a,c),根据move(1,x,y,z)的结果,这个地方会得到b-->c。
因此,当n=2时,函数的执行结果为a-->b,a-->c,b-->c。通过这个结果我们也可以看出,move((2,x,y,z)的结果为x-->y,x-->z,y-->z.
依次类推,当n=3时,我们在执行函数时就会遇到move(2,a,c,b),move(2,b,a,c)这个结果可以直接套用n=2时move(2,x,y,z)的结果为x-->y,x-->z,y-->z的结果。
综上,该函数是一个迭代函数,会层层套用前面的结果。当然,该函数也很好的体现了该游戏的规则,建议百度了解该游戏的具体内容。
这个游戏是这样子的:
A B C三个柱子
A柱子上有几个圆盘 圆盘大小从上到下以此增大,最上面的圆盘最小,借助B柱子 把A柱子的所有圆盘还按照原先的顺序移动到C柱子上,且移动过程中小圆盘不能在大圆盘下面 只能在大圆盘上面。(一次只能移动一个圆盘)
假如只有一个圆盘,直接移到C
有两个圆盘,将A柱子最上面的一个移到B柱子,A剩下的一个圆盘移到C柱子,再将B柱子上最小的圆盘移到C柱子, 这样就和A柱子开始的顺序一样
有三个圆盘,将A柱子最上面的小圆盘移到C柱子,A柱子第二个圆盘移到B柱子,C柱子上一开始移动的圆盘再移到B柱子,这时B柱子上的顺序是两个较小圆盘,A柱子有一个最大的圆盘没动。接下来将A柱子上最大的圆盘移到C柱子上,这样底座就弄好了。B柱子上第一个圆盘移到A柱子,B剩下的第二个移到C柱子,这时,C柱子有两个圆盘,A柱子剩下最小的圆盘,B无圆盘,将A上最小的圆盘移到C柱子上。C柱子上三个圆盘的摆放顺序就和一开始一样了。
越多圆盘,步骤越多,必须按照大小顺序来移动,所以比较麻烦,
举报