1.递归函数
递归是一种解决问题的一种思想方法,将一个大问题分解为一个个小问题,直到无法分解时,再解决问题。
- 递归函数有两个条件
1.基线条件:问题可以被分解为最小的问题,满足基线条件时,递归就不执行了
2.递归条件:可以将问题继续分解
#用递归的方式求任意数的阶乘
def fn(n):
if n==1:
return 1
return n*fn(n-1) # n*n-1*n-2...2*1
print(fn(6))
练 习
# 创建一个函数来为任意数字做任意幂运算 求n的i次幂
def fn(n,i):
if n==1 or i==0:
return 1
return n*fn(n,i-1) # n*n**i-1→n*n*n**i-2...n**1*n**0
#定义一个函数用来检测一个任意字符是否是回文字符如果是返回True,如果不是返回False
回文字符串形式: adfgfda
def fn(s):
if len(s) < 2:
return True
elif s[0] != s[-1]:
return False
return s[0] == s[-1] and fn(s[1:-1]) # swqadaqws → 切片变为 wqadaqw → qadaq ... d
print(fn('sadas'))
True
2.汉诺塔问题
现在有ABC三根柱⼦。要求:将A柱所有的圆盘放到C柱。在移动的过程中可以借助B柱。并且规定⼤圆盘不能放⼩圆盘上⾯,每次只能移动⼀个盘⼦。
- 当只有一个圆盘的时候 A→C
- 两个圆盘的时候 A→B ,A→C,B→C
- 三个的时候 把上面两个看成一个整体
def hanoi(num,a,b,c):
if num ==1 :
print('第 1 个 盘子',a,'->',c)
else:
hanoi(num-1,a,c,b) # num-1:除去下面那一个,剩上面那一整体 先把上面的盘子 a 借助 c 到 b
print('第',num,'个盘子',a,'->',c) #将最下面那个盘子移动 a 到 c
hanoi(num-1,b,a,c) # b 借助 a 到 c
hanoi(3,'A','B','C')
第 1 个 盘子 A -> C
第 2 个盘子 A -> B
第 1 个 盘子 C -> B
第 3 个盘子 A -> C
第 1 个 盘子 B -> A
第 2 个盘子 B -> C
第 1 个 盘子 A -> C