Python 11:再帰関数
858 ワード
関数の内部で、他の関数を呼び出すことができます.関数が内部で自身を呼び出す場合、この関数は再帰関数です.例を挙げて階乗nを計算!=1 * 2 * 3 * 4... * n,fact(n)で表すと,fact(n)=n!=1 * 2 * 3 * 4... * n = (n-1)! * n=fact(n−1)*nであるため、fact(n)はn*fact(n−1)と表すことができ、n=1のみが特殊な処理が必要である.そこでfact(n)は再帰的に書きます.
上は再帰関数です.
再帰関数の利点は定義が簡単で、論理がはっきりしていることです.理論的には,すべての再帰関数はループの方式で書くことができるが,論理は再帰よりも明確ではない.
練習:ハノータの移動は再帰関数で非常に簡単に実現できる.move(n,a,b,c)関数を作成してください.パラメータnを受け入れ、3つの柱A,B,Cのうち1番目の柱Aの皿の数を表し、すべての皿をAからBを借りてCに移動する方法を印刷します.
def fact(n):
if n == 1:
return 1
return n * fact(n - 1)
上は再帰関数です.
>>> fact(1)
1
>>> fact(5)
120
再帰関数の利点は定義が簡単で、論理がはっきりしていることです.理論的には,すべての再帰関数はループの方式で書くことができるが,論理は再帰よりも明確ではない.
練習:ハノータの移動は再帰関数で非常に簡単に実現できる.move(n,a,b,c)関数を作成してください.パラメータnを受け入れ、3つの柱A,B,Cのうち1番目の柱Aの皿の数を表し、すべての皿をAからBを借りてCに移動する方法を印刷します.
def move(n,a,b,c):
if n == 1:
print(a,'-->'c) #a
else:
move(n - 1,a,c,b) # a n-1 b
move(1,a,b,c) # a c
move(n-1,b,a,c) # b n-1 c