LoginSignup
0
2

More than 5 years have passed since last update.

再帰の最大回数を確認する/設定する

Last updated at Posted at 2019-03-05

再帰の最大回数を確認したい場合はsys.getrecursionlimit、設定したい場合はsys.setrecursionlimitをそれぞれ利用します。なお2つのメソッドのドキュメントはそれぞれ次の通りです。

実際的なアプリケーション開発において、再帰が必要になることは少ないと思いますが、たとえば競技プログラミングでは再帰関数を実装する機会が多々あります。そのような場合にsys.setrecursionlimitを覚えておくと、とても便利です。というのは、再帰の最大回数を増やしてやるだけで、ACするケースが意外にあるからです(個人的な体感)。逆に言うと、再帰の回数がデフォルト値だと少なすぎ、そのせいでRuntime Error (RE; Stack Over Flow)になっているケースが少なからず存在するということです。

では簡単に実験してみましょう。なおPythonのバージョンは3.7.2になります。

fibは再帰を用いてフィボナッチ数列を求める関数です。sys.setrecursionlimitにより再帰の最大回数を変えることで、fibがStack Over Flowになったり、正しく数値を求めることができたりする様子が確認できます。

>>> import sys
>>> fib = lambda n: 1 if n < 2 else fib(n - 1) + fib(n - 2)
>>>
>>>
>>> sys.setrecursionlimit(10)
>>> sys.getrecursionlimit()
10
>>> fib(20)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
  File "<stdin>", line 1, in <lambda>
  File "<stdin>", line 1, in <lambda>
  [Previous line repeated 6 more times]
RecursionError: maximum recursion depth exceeded in comparison
>>>
>>>
>>> sys.setrecursionlimit(100)
>>> sys.getrecursionlimit()
100
>>> fib(20)
10946
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2