递归
递归的两个特点
1.调用自身
2.结束条件
函数的执行顺序是自上而下的,如图
小框代表,print;大框代表调用自身函数
def func1(x):
if x>0: #结束条件
print(x)
func1(x-1)#调用自身
#打印出3,2,1
def func2(x):
if x>0: #结束条件
func2(x-1) #调用自身
print(x)
#打印出1,2,3
递归的实例
汉诺塔
简述:三根柱子A,B.C,一根柱子A上由小到大,自上而下,穿着盘子。将A柱子上的盘子,移动到C柱子。
一次只能移动一个盘子,且只能小盘子在大盘子上,盘子只能在柱子之间移动。
思路:将盘子分为两组
最大的盘子以上的(n-1)个盘子,由A经C移动到B
最大的盘子,第n个盘子,由A移动到C
最大的盘子以上的(n-1)个盘子,由B经A移动到C
count=0
def hanio(n,a,b,c):
if n>0: #当A柱子没有盘子时,不需要移动
global count
hanio(n-1,a,c,b)
count+=1
print(" %s moving from %s to %s" %(count,a,c))
hanio(n-1,b,a,c)
当n=1时,直接执行A——>C
当n=2时,执行A——>B hanio(2-1,a,c,b)
A——>C print
B——>C hanio(2-1,b,a,c)
#计算需要几步
def f(n):
if n==1:
return 1
return 2*f(n-1)+1