Pythonでは関数内でその関数自身を呼び出して繰り返し処理を行うことができます。ここではPythonにおける「再帰」について解説しています。
この記事の対象
再帰とは
再帰(recursion)アルゴリズムとは、自分自身の中から自身を呼び出すことで複雑なアルゴリズムを用いたプログラムを明快に記述できるものです。
言い換えると「関数の中でその関数を呼び出す」という動作になります。
再帰アルゴリズムのメリット
再帰アルゴリズムを使用するメリットはプログラムの「簡略化」になります。
関数の中で関数を呼び出すことで書くコードがシンプルになります。
再帰の型
#再帰の型
def 関数名:
#処理内容
関数名
関数名#実行
関数内で任意の位置でその関数自身を呼び出すことが「再帰」となります。よって、関数内にその関数を呼び出すだけです。
再帰はfor構文やif構文と一緒に使用することで任意の回数、条件で呼び出します。
再帰を用いた使用例
フィボナッチ数の作成
#再帰を用いた使用例
def fib(i):
if i == 1 or i == 2:
return 1
elif i == 0:
pass
else:
return fib(i-1) + fib(i-2)
for i in range(1,20):
print(fib(i))
上記のプログラムは、再帰を用いて「Fibonacci数」を出力するものです。for構文で任意の回数呼び出しています。rangeで1~19まで繰り返しの指定をしていますが、関数内の条件式で「0」の場合も記載しています。これはrangeで未指定の場合だと0始まりなので、指定しなかった場合の回避のため記述しています。
elseでn項に対する「n-1」「n-2」を加えた計算をさせています。
結果
#1
#1
#2
#3
#5
#8
#13
#21
#34
#55
#89
#144
#233
#377
#610
#987
#1597
#2584
#4181
結果として20回目まで計算できていることが確認できました。
フィボナッチ螺旋図を描いてみる
import turtle
def fibonacci_spiral(n):
a = 0
b = 1
turtle.pendown()
for i in range(n):
c = a + b
a = b
b = c
turtle.forward(c * 5)
turtle.left(90)
turtle.speed(0)
turtle.penup()
turtle.goto(0, 0)
fibonacci_spiral(50)
turtle.done()
上記のプログラムはフィボナッチ螺旋図を「turtle」で描画する内容となっています。