前面在Topcoder上面看到一道题,是用到递归,于是说仔细学习一下递归算法,想到汉诺塔应该是最入门的递归,结果折腾了半天写不出来 。最后去找了个正确答案。最后虽然似乎看懂了,但自问个人真是写不出来。所以就贴在这里,算是对自己的一种鞭策吧!
def hanoi(n,list_from, list_to=[], list_buf=[]):
global count
if n > 0:
hanoi(n -1 ,list_from,list_buf,list_to)
if list_from:
list_to.append(list_from.pop())
print list_from, list_to, list_buf
count += 1
hanoi(n -1, list_buf,list_to,list_from)
count = 0
list1 = range(4,0,-1)
list_to = []
hanoi(4,list1, list_to)
print list_to, count