利用递归函数来解决数学中的阶乘问题
def fact(n): 2 if n== 0: 3 return 1 4 else: 5 return n*fact(n-1) 6 7
利用递归函数来解决汉诺塔问题
关于汉诺塔问题,代码很多人知道,甚至倒背如流
问题描述:把 A竿的盘全部移动到C竿上,并且顺序不能改变,每次只能移动一个盘子,并且要求在移动过程中始终保持这大盘在下小盘在上。
代码罗列:
def fact2(n,src,dst,mid): 14 global count 15 if n ==1: 16 print("{}:{}->{}".format(1,src,dst)) 17 count += 1 18 else: 19 fact2(n-1,src,mid,dst) 20 print("{}:{}->{}".format(n,src,dst)) 21 count += 1 22 fact2(n-1,mid,dst,src)
1、先从最简单的两个盘来说起
两个盘虽然简单,但多盘问题基本上都是围绕着两个盘的问题来开展的。
规律:
两个盘的移动可以只通过两根柱子之间来而完成,而不需要地三根柱子的辅助
需要注意的一点就是大家一定不要纠结与每个盘是怎么具体移动的,否则则会钻井牛角尖中。
递归
递归的实现是函数+分支语句
递归的过程就是递和归的过程
汉诺塔的最终简化移动过程就是
A->B将n-1个盘子移动到B
A->c将最大的盘移动到C
B->C将n-1个盘移动到C