この記事では、Pythonの再帰関数の書き方を学びます。
そもそも再帰関数って何?
ある関数が自分自身を呼び出すように定義されている場合、再帰的関数と呼ばれます。
他の言語と同様に、Pythonでも再帰的関数を使う事ができます。
。
再帰は、繰り返しのたびに関数が呼び出されるforループと非常によく似ています。
そのため、Pythonの再帰関数の代わりとして、forループを使用することができます。
しかし、プログラマによってはforループよりも再帰を好む人もいます。
これは好みの問題でもありますが、状況によってforループの方が分かりやすいコードになったり、逆に再帰関数の方がシンプルなコードになったりするので、一長一短ですね。
Pythonの再帰関数のメリット・デメリット
再帰関数には以下のメリットがあります。
- 再帰によってコードの行数を減らせることが多い。
- 再帰のコードはシンプル。
- ある程度理解が深まれば、関数で再帰を使うのは簡単。
逆に再帰関数のデメリットは以下の通りでうs。
- 正しく実装しないと、関数が終了しない。
-
forループと比較すると、再帰を理解することは難しい。
Python再帰関数の例
Pythonの再帰関数の例をいくつか見てみましょう。
1. 整数の階乗
ある整数の階乗は、1からその整数までの数を掛け合わせることで計算されます。
例えば、10の階乗は123…910となります。
まずは、forループを使った階乗関数の書き方を見てみましょう。
def factorial(n):
result = 1
for i in range(1 , n + 1):
result = result * i
return result
print(f'Factorial of 10 = {factorial(10)}')
print(f'Factorial of 5 = {factorial(5)}')
今度は、factor()関数を再帰関数を使って実装していきます。
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n- 1)
print(f'Factorial of 10 = {factorial(10)}')
print(f'Factorial of 5 = {factorial(5)}')
結果は同じですが、再帰関数の方がよりシンプルに実装できます。
Factorial of 10 = 3628800
Factorial of 5 = 120
この記事もチェック:Pythonのoct関数を使って整数(10進数)を8進数に変換する方法
2. Pythonの再帰関数を使ってフィボナッチ級数を実装する
フィボナッチ級数とは、各数値が先行する2つの数値の和となるような数値の並びのことです。
例えば、-1, 1, 2, 3, 5, 8, 13, 21 と言う風なものです。
まずは、ループを使ってフィボナッチ級数の数値を返す関数を見てみましょう。
def fibonacci(n):
""" Returns Fibonacci Number at nth position using loop"""
if n == 0:
return 0
if n == 1:
return 1
i1 = 0
i2 = 1
num = 1
for x in range(1, n):
num = i1 + i2
i1 = i2
i2 = num
return num
for i in range(10):
print(fibonacci(i), end=" ")
# 出力は以下の通り: 0 1 1 2 3 5 8 13 21 34
フィボナッチ級数をfor文で書くと、結構複雑な感じになりますね。
今度は、再帰関数を使ってフィボナッチ級数を書いていきます。
def fibonacci(n):
""" Returns Fibonacci Number at nth position using recursion"""
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n- 1) + fibonacci(n- 2)
for i in range(10):
print(fibonacci(i), end=" ")
# 出力は以下の通り: 0 1 1 2 3 5 8 13 21 34
フィボナッチ級数の様な複雑な計算の場合は、再帰関数の方がシンプルに実装ができます。