为了账号安全,请及时绑定邮箱和手机立即绑定

看不懂答案

答案的代码是不是改变 了move括号里面参数的位置,但是print的一直是a -->c, 而不是不改变move括号里的参数。不太理解推导的过程。

正在回答

2 回答

形参和实参的区别 可以自己画个图帮助理解题干 三个参数的意思是 从第一个参数通过第二个参数移到第三个参数

0 回复 有任何疑惑可以回复我~
#1

可可西里羊 提问者

非常感谢!
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的递归函数就会有头绪了。 
 说得不对处请指正。感谢不用限时完成作业,感谢被指派回答问题。

6 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

看不懂答案

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信