L'étude Python en note trois: les opérations récursives, pour réaliser la séquence de Fibonacci et la tour de Hanoi

Opération récursive

  • Récursivité: la fonction s'appelle elle-même indirectement ou directement
  • La récursivité est divisée en deux processus:
    • 1. Le processus d'appel et de décomposition
    • 2. Sauvegarde, le processus de synthèse
  • La récursion a besoin d'attention:
    • Il doit y avoir une condition de fin ***
  • L'utilisation d'une opération récursive rendra le programme très simple et concis
  • Algorithmes qui échangent des ressources pour la vitesse d'écriture
def funa(n):
    print("this is amy")

def funcb(n):
    funa(100)
    print("this is csc")
    
funcb(100)

c'est amy
c'est 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

Séquence de Fibonacci

  • Définition mathématique: f (n) = f (n-1) + f (n-2), n> 2, les premier et deuxième chiffres sont: 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

La tour de Hanoi

  • Il y a trois piliers A, B et C.Il y a trois plaques sur A. Il est stipulé que la grande plaque doit être en dessous à chaque fois.
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

Je suppose que tu aimes

Origine blog.csdn.net/amyniez/article/details/104363472
conseillé
Classement