Pythonの調査では、フィボナッチ数列とハノイの塔を実現するための再帰操作の3つに注目しています。

再帰操作

  • 再帰:関数はそれ自体を間接的または直接的に呼び出します
  • 再帰は2つのプロセスに分けられます。
    • 1.呼び出して分解するプロセス
    • 2.バックアップ、合成のプロセス
  • 再帰には注意が必要です:
    • 終了条件が必要です***
  • 再帰操作を使用すると、プログラムが非常にシンプルで簡潔になります
  • リソースを書き込み速度と交換するアルゴリズム
def funa(n):
    print("this is amy")

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

これはエイミーです
これは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

フィボナッチ数列

  • 数学的定義:f(n)= f(n-1)+ f(n-2)、n> 2、1桁目と2桁目は両方とも: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

ハノイの塔

  • A、B、Cの3本の柱があります。Aには3枚のプレートがあります。毎回大きなプレートを下に置く必要があると規定されています。最後に、3枚のプレートを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

おすすめ

転載: blog.csdn.net/amyniez/article/details/104363472