Discuss / Python / 刚学python,手感不是太熟练,思路还可以。写cpp的

刚学python,手感不是太熟练,思路还可以。写cpp的

Topic source

希望刚学的同学不要气馁,汉诺一塔和二叉树算是递归的经典应用了。我刚学的时候也花了一番力气,有付出才有收获,这次也是一次成功,算是有点小进步把。。。简单说下思路,递归的最高境界就是复杂的逻辑用自然的语言描述出来,首先逻辑要清晰,另外不要把自己带到递归里。。那么多层循坏很容易绕晕的。 大家可以先看下汉诺一塔的故事,再来做这道题,现在有3个小棍子,棍子上穿着铜钱,记住铜钱的大小,是大的在下面,小的在上面,现在铜钱只能在这3个小棍子之间移动,移动的顺序也必须保证大的在下面,小的在上面。 现在想要的结果是把A棍子上的铜钱按照规则移动到C棍子。 我们按照递归的思想找下规律,如果只有1个铜钱,直接从A -> C 2个铜钱,步骤是先移动1个铜钱从A -> B,在 A->C 再B->C n个铜钱,先移动n-1个铜钱从A -> B,因为最大的铜钱要放到C的第一个,所以把最后一个从 A ->C ,然后把剩下的N-1个铜钱从B -> C就行了。 相信很多同学上面的步骤很清晰的,就是不知道怎么在递归函数中调用,其实move(N,A,B,C),我们要理解那个表示源地址,那个是目的地址,那个是中间地址,就明白了。代码如下

def print_hanoi(n,A,B,C): if(n == 1): print(A,'-->',C) else: print_hanoi(n-1,A,C,B) print_hanoi(1,A,B,C) print_hanoi(n-1,B,A,C)

ANIO337845818

#2 Created at ... [Delete] [Delete and Lock User]

解释的很清楚很好

初学python,大佬的代码简单明了,学习了!

看了一个下午,总算理解了,结合知首的思路,这个还是有点难

##厉害,看了半天才看懂

李小散

#6 Created at ... [Delete] [Delete and Lock User]

n 为 奇数时(第/最后 一步)为A-->C,为偶数时,(第/最后 一步)为A---->B/B---->C;所以现在不是很明白怎么迭代出来的。


  • 1

Reply