Operación recursiva
- Recursión: la función se llama a sí misma directa o indirectamente.
- La recursividad se divide en dos procesos:
- 1. El proceso de llamar y descomponer
- 2. Copia de seguridad, el proceso de síntesis
- La recursividad necesita atención:
- Debe haber una condición final ***
- El uso de la operación recursiva hará que el programa sea muy simple y conciso.
- Algoritmos que intercambian recursos por velocidad de escritura
def funa(n):
print("this is amy")
def funcb(n):
funa(100)
print("this is csc")
funcb(100)
esta es amy
esto es csc
# fun_a 表示计算阶乘:f(n)=n*f(n-1),n>1
def fun_a(n):
print(n)
# 此为结束条件n=1
if n == 1:
return 1
return n * fun_a(n-1)
rst = fun_a(5)
print("f(10) = ", rst)
# 若无结束条件,将无限递归下去,出现RecursionError(递归错误)
5
4
3
2
1
f (10) = 120
secuencia Fibonacci
- Definición matemática: f (n) = f (n-1) + f (n-2), n> 2, tanto el primer dígito como el segundo son: 1
def fib(n):
if n ==1 or n == 2:
return 1
return fib(n-1) + fib(n-2)
rst = fib(10)
print("rst = ", rst)
rst = 55
Torre de Hanoi
- Hay tres pilares A, B y C. Hay tres placas en A. Se estipula que la placa grande debe estar debajo cada vez. Finalmente, las tres placas se mueven a la parte superior de C.
a, b, c = "A", "B", "C"
def hano(a,b,c,n):
if n == 1:
print("{} -> {}".format(a,c))
return None
if n == 2:
print("{} -> {}".format(a,c))
print("{} -> {}".format(a,b))
print("{} -> {}".format(b,c))
return None
# 将n-1个盘子,借助于c塔移动到b塔上
hano(a,c,b,n-1)
print("{} -> {}".format(a,c))
hano(b, a, c, n-1)
#只有一个盘子
hano(a, b, c, 1)
print()
# 有三个盘子
hano(a, b, c, 3)
A -> C
A -> B
A -> C
C -> B
A -> C
B -> C
B -> A
A -> C