递归
内容介绍
func1和func2没有结束条件。
图解func递归过程:
长框代表func3,窄框代表print。函数执行过程是从上至下。
长框代表func4,窄框代表print。函数执行过程是从上至下。
由此可见,两个函数的执行结果不一样。
汉诺塔问题
问题简介:
两个圆盘时的移动过程,由A到C:
当有n个盘子时,将上面n-1个盘子看成一个整体,把下面的盘子看成1.即将问题简化为两个盘子。
由于有n-1个盘子,所以要将n-1个盘子移动到B,必然要经过C。
只有第二步是移动1个盘子,其他的都是n-1的过程。比原问题规模小了1的问题,原问题递归的子问题。
# n-n个盘子
# abc-柱子
def hanoi(n,a,b,c):# 把n个盘子从a经过b移动到c
if n > 0: # 递归终止条件,盘子数为0
hanoi(n-1,a,c,b)# 把n-1个盘子从a经过c移动到b
print("moving from %s to %s" %(a,c) )
hanoi(n-1,b,a,c)
hanoi(3,'A','B','C')
----------------------------
moving from A to C
moving from A to B
moving from C to B
moving from A to C
moving from B to A
moving from B to C
moving from A to C
第一步h(n-1),第二步1,第三步h(n-1)