【Python入門】再帰関数って何?フィボナッチ数でやさしく学ぶ!

Python

Pythonでは「関数の中で自分自身を呼び出す」という特殊なテクニックがあります。これは再帰(さいき)関数と呼ばれ、複雑な処理をシンプルに書けるようになる便利な仕組みです。

この記事でわかること

  • 再帰とはどういう動作か
  • 再帰関数の書き方
  • フィボナッチ数列の具体例
  • 実践:再帰+turtleで螺旋を描く
スポンサーリンク
スポンサーリンク

再帰(Recursion)とは?

再帰(recursion)アルゴリズムとは、自分自身の中から自身を呼び出すことで複雑なアルゴリズムを用いたプログラムを明快に記述できるものです。

言い換えると「関数の中でその関数を呼び出す」という動作になります。

具体例:再帰のイメージ

def greet(n):
    if n == 0:
        return
    print(f"こんにちは!あと{n}回")
    greet(n - 1)

実行:

greet(3)

結果

こんにちは!あと3回
こんにちは!あと2回
こんにちは!あと1回

関数が自分を「減らしながら」呼び出すことで、ループのように処理が繰り返されています。

再帰の基本構文

def 関数名(引数):
    if 終了条件:
        return 結果
    return 関数名(別の引数)  # 自分自身を呼び出す

関数内で任意の位置でその関数自身を呼び出すことが「再帰」となります。よって、関数内にその関数を呼び出すだけです。

再帰はfor構文やif構文と一緒に使用することで任意の回数、条件で呼び出します。

なぜ再帰を使うの?

メリット説明
✅ シンプル繰り返し処理を短く書ける
✅ 構造が自然木構造や数列などに適している
✅ コードが見やすいforwhile より読みやすくなることも

ただし、処理が複雑になりすぎるとわかりづらくなるので注意しましょう!

フィボナッチ数列を再帰で求める

フィボナッチ数列とは?

1, 1, 2, 3, 5, 8, 13, …
という風に、「前の2つの数を足して次の数を作る」数列です。

#再帰を用いた使用例
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,11):
   print(fib(i))

上記のプログラムは、再帰を用いて「Fibonacci数」を出力するものです。for構文で任意の回数呼び出しています。rangeで1~10まで繰り返しの指定をしていますが、関数内の条件式で「0」の場合も記載しています。これはrangeで未指定の場合だと0始まりなので、指定しなかった場合の回避のため記述しています。

elseでn項に対する「n-1」「n-2」を加えた計算をさせています。

結果

#1
#1
#2
#3
#5
#8
#13
#21
#34
#55

結果として10回目まで計算できていることが確認できました。

応用:フィボナッチ螺旋を描いてみよう!

Pythonの「turtle」ライブラリを使って、フィボナッチのカーブを可視化することもできます。

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()

結果

補足:再帰 vs 繰り返し(for)

処理違い
再帰関数を自分で呼び出す
for/while明示的にループする

どちらを使うかは場面によりますが、再帰は「階層構造」「木構造」などで力を発揮します。

まとめ

内容ポイント
再帰とは関数の中で関数を呼び出す
書き方終了条件再帰呼び出し
メリットシンプルで自然な構造が書ける
注意点無限ループにならないよう終了条件を忘れずに!

次に読む:lambda式とは?無名関数をやさしく解説!

タイトルとURLをコピーしました