記事内に広告が含まれています

【Python】再帰関数とループ(while文)の処理速度の計測

テクノロジー
この記事は約6分で読めます。

こんにちは、なりかくんです。
今回は、ふと気になったPythonで再帰関数とループ(while文)の処理速度とメモリについて検証しましたので紹介します。

スポンサーリンク

結果

まず最初に結果からお見せします。
今回は、10回計測してその平均から考察します。

再帰関数の場合は、メモリ消費量平均が23.12461MiBで処理時間平均が0.45662msでした。
ループ文の場合は、メモリ消費量平均が22.40977MiBで処理時間平均が0.27803msでした。

このことからループ(while文)のほうが処理速度とメモリ消費量が優れているということが分かります。

なお今回利用したメモリ消費量と時間計測については、メモリはmemory_profiler、時間はline_profilerを利用しました。

次に検証に使ったコードと検証結果の一部をお見せします。

再帰関数の場合

コードは、以下のようになっています。まず、main関数を呼び出し、sumを定義したのち再帰関数に突入させます。ifで500以上になれば結果をmainに返すという形です。

def main():
    sum = 0
    sum = tasu(sum)
    print(sum)

def tasu(sum):
    sum = sum + 1
    if sum >= 500:
        return sum
    else:
        return tasu(sum)

時間結果は、以下の通りです。

Total time: 0.0004278 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     3                                           def main():
     4         1          9.0      9.0      0.2      sum = 0
     5         1       3422.0   3422.0     80.0      sum = tasu(sum)
     6         1        847.0    847.0     19.8      print(sum)

メモリ消費量は、以下の通りです。

Line #    Mem usage    Increment  Occurrences   Line Contents
=============================================================
     3  22.4570 MiB  22.4570 MiB           1   @profile(precision=4)
     4                                         def main():
     5  22.4570 MiB   0.0000 MiB           1       sum = 0
     6  23.1797 MiB   0.7227 MiB           1       sum = tasu(sum)
     7  23.1836 MiB   0.0039 MiB           1       print(sum)

ループ(while文)の場合

コードは、以下の通りです。こちらは単純にsumを定義したのちwhile文にて500以上になるまでループするという形にしています。ifなどの条件をそろえるために今回はwhile文を利用しています。

def main():
    sum = 0
    while True:
        sum = sum + 1
        if sum >= 500:
            break
    print(sum)

時間結果は、以下の通りです。

Total time: 0.0002893 s


Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     3                                           def main():
     4         1          8.0      8.0      0.3      sum = 0
     5                                               while True:
     6       500        793.0      1.6     27.4          sum = sum + 1
     7       500        814.0      1.6     28.1          if sum >= 500:
     8         1          2.0      2.0      0.1              break
     9         1       1276.0   1276.0     44.1      print(sum)

メモリ消費量は以下の通りです。

Line #    Mem usage    Increment  Occurrences   Line Contents
=============================================================
     3  22.3477 MiB  22.3477 MiB           1   @profile(precision=4)
     4                                         def main():
     5  22.3477 MiB   0.0000 MiB           1       sum = 0
     6                                             while True:
     7  22.3477 MiB   0.0000 MiB         500           sum = sum + 1
     8  22.3477 MiB   0.0000 MiB         500           if sum >= 500:
     9  22.3477 MiB   0.0000 MiB           1               break
    10  22.3555 MiB   0.0078 MiB           1       print(sum)

以上、検証結果をご紹介しました。

コメント

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