Discuss / Python / 关于作业

关于作业

Topic source

看不懂的同学可以去知乎找“python中的汉诺塔递归算法的具体运算过程是怎样的?”这个问题的答案。把答案都看了就懂了。我也来简单说一下。

函数就用参考源码中的,假设我们的输入的内容是(3,‘甲’,‘乙’,‘丙’)。else中的三个move我们称为move1、move2和move3的话,那么判断顺序是:

(3,‘甲’,‘乙’,‘丙’) if不成立 1.1(3,‘甲’,‘乙’,‘丙’)输入move1,得到(2,‘甲’,‘丙’,‘乙’) if不成立 1.2(2,‘甲’,‘丙’,‘乙’)输入move1,得到(1,‘甲’,‘乙’,‘丙’) if成立,输出‘甲’-->‘丙’ 1.3(2,‘甲’,‘丙’,‘乙’)输入move2,得到(1,‘甲’,‘丙’,‘乙’) if成立,输出‘甲’-->‘乙’ 1.4(2,‘甲’,‘丙’,‘乙’)输入move3,得到(1,‘丙’,‘甲’,‘乙’) if成立,输出‘丙’-->‘乙’

2.1(3,‘甲’,‘乙’,‘丙’)输入move2,得到(1,‘甲’,‘乙’,‘丙’) if成立,输出‘甲’-->‘乙’

3.1(3,‘甲’,‘乙’,‘丙’)输入move3,得到(2,‘乙’,‘甲’,‘丙’) if不成立 3.2(2,‘乙’,‘甲’,‘丙’)输入move1,得到(1,‘乙’,‘丙’,‘甲’) if成立,输出‘乙’-->‘甲’ 3.3(2,‘乙’,‘甲’,‘丙’)输入move2,得到(1,‘乙’,‘甲’,‘丙’) if成立,输出‘乙’-->‘丙’ 3.4(2,‘乙’,‘甲’,‘丙’)输入move3,得到(1,‘甲’,‘乙’,‘丙’) if成立,输入‘甲’-->‘丙’

有几点需要说明: 1、每次结果不成立时就需要再从move1开始。当move1成立时再判断下一个move。 2、输入下一个move的并不是move1成立的结果,而是让move1结果成立时的输入值,也就是1.2中的(2,‘甲’,‘丙’,‘乙’)继续进入move2和move3中判断。 3、(2,‘甲’,‘丙’,‘乙’)作为输入值让move1、2、3均成立后,把上一个让move1不成立的结果带入move2中判断,也就是(3,‘甲’,‘乙’,‘丙’)。注意,(3,‘甲’,‘乙’,‘丙’)输入move1后if不成立,(2,‘甲’,‘丙’,‘乙’)输入move1后if成立,所以让move1不成立的上一个值是(3,‘甲’,‘乙’,‘丙’)。 4、每次输入move1、2、3时,不论是甲乙丙还丙甲乙,他们都是abc,也就是谁在左谁就是a,中间的是b,右侧是c,然后根据move1、2、3中的abc顺序再调换甲乙丙顺序。比如输入的是(2,‘乙’,‘丙’,‘甲’),那么a=乙,b=丙,c=甲,加入输入move(n-1,b,a,c),得到就是(1,丙,乙,甲) 5、判断如何在3个move中循环需要关注输入的值。if成立print时候需要关注输出的值。

Thank you for your reply!but,l found a error。ex 2.1 meets error。


  • 1

Reply