看不懂答案
答案的代码是不是改变 了move括号里面参数的位置,但是print的一直是a -->c, 而不是不改变move括号里的参数。不太理解推导的过程。
答案的代码是不是改变 了move括号里面参数的位置,但是print的一直是a -->c, 而不是不改变move括号里的参数。不太理解推导的过程。
2016-03-04
二层汉诺塔递归作业的分析
开始我看了答案也没明白,更不用说编程了,直到我在程序里加了指示语句,
并把四层塔改成两层塔)(简化),才有了些了解。下面写出原来的程序以及执行结果:
def move(n, a, b, c):
if n == 1:
print a, '-->', c
print n, 'h' #用h指示上一条打印语句的结束
else:
move(n-1, a, c, b) #将n-1个盘移到b柱上
print n, 'x' #用x指示上一行函数的结束
move(1, a, b, c) #将最后一个盘移到c柱上
print n, 'y' #用y指示上一行函数的结束
move(n-1, b, a, c) #将b柱上的盘移到c柱上
print n, 'z' #用y指示上一行函数的结束
n = int(input(‘请输入汉诺塔的层数: ’))
move(n, 'A', 'B', 'C') #调用函数
执行结果:
A --> B
1 h
2 x
A --> C
1 h
2 y
B --> C
1 h
2 c
整个程序分为三个部分。第一部分定义函数; 第二部分输入层数; 第三部分调用函数。
先说函数部分,move函数有四个参数,n是层数,我将把它设为2;a,b,c分别代表第一、二、三
柱, 要注意的是它们是字符类型的变量,赋给它什么字符,它就代表什么字符。在if语句中,
print a, '-->', b语句,应该理解为打印第一个变量到第三个变量。
再说调用函数的参数,'A','B','C'分别赋给a,b,c三个变量。
下面 来说程序的运行。运行开始时先输入层数2。
接着就执行move(2,'A','B','C')函数,n=2的调用开始:
跳过if n==1的判断,进入else:中的
第一个函数,层数变量n-1=2-1,'A'赋给a,'B'赋给c,'C'赋给b,即move(1,'A','B','C'),
这时n=2的调用还没有结束,又进入n =1的调用:
进入if n==1:,条件符合;进入print a, '-->', c语句,因为a变量被赋为‘A’,c变量被
赋为'B',所以打印 A --> B,再打印1 h(因为n=1)。
这时,else中的第一个函数结束,就会打印2 x (n=1的调用结束,n=2的调用还没结束)。
往下进入第二个函数move(1,a,b,c,),这也是n=1的调用,变成move(1,'A','B','C'),这次c
变量被赋了‘C’值, n=1,符合条件if条件,执行print a,-->,c语句, 打印的是A --> C,再
打印指示语句 1 h。
这时,else中的第二个函数结束,打印下面的指示语句 2 y。进入第三个函数,也是n=1的调用:
只不过'A'赋给了b变量,'B'赋给了a变量,打印a --> c时,实际打印的是B --> C,最后打印两个
指示语句后,n=2的调用结束。整个程序结束。
如果再分析n=3,或n=4的递归函数就会有头绪了。
说得不对处请指正。感谢不用限时完成作业,感谢被指派回答问题。
举报