再帰の最大回数を確認したい場合はsys.getrecursionlimit
、設定したい場合はsys.setrecursionlimit
をそれぞれ利用します。なお2つのメソッドのドキュメントはそれぞれ次の通りです。
-
sys.getrecursionlimit
: https://docs.python.org/ja/3/library/sys.html#sys.getrecursionlimit -
sys.setrecursionlimit
: https://docs.python.org/ja/3/library/sys.html#sys.setrecursionlimit
実際的なアプリケーション開発において、再帰が必要になることは少ないと思いますが、たとえば競技プログラミングでは再帰関数を実装する機会が多々あります。そのような場合に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