メモリを大量に消費する再帰関数の実行がエラーなしで抑制されるのはなぜですか?

アーン

実行しているファイルの関数に問題があります。IndexError通常は生成することが期待されます。

しかし、N以下のように定義なる十分に大きな誤差がされない図示し抑制するように思われます。なぜこれが起こっているのか知りたいのですが。エラーがスローされないのはなぜですか?

from collections import Counter
from sys import setrecursionlimit

def correct(events: list, lens: list=[]):

    counts = Counter(events).values()
    present = []
    while events[0] not in present:
        present.append(events.pop(0))
    lens.append(len(present))
    correct(events, lens)

if __name__ == '__main__':

    N = 50000  # enough in my case, increase if the problem does not occur
    setrecursionlimit(10000)
    result = correct([711321] * N)

PowerShellを介してWindows10でファイルを実行しています。ファイルの実行後、出力は生成されません。それにもかかわらず、その戻りステータス$?Falseであり、実行に問題があることを示しています。

このコードをPythonシェルで実行すると、強制的に閉じられることに注意してください。

Fakher Mokadem

これは、sys.setrecursionlimitが再帰制限(インタープリタースタックの最大深度)を最大でシステムの再帰制限に設定するためです。これは、sys.getrecursionlimitで取得できます。実際には、CPythonインタープリターは、制限を指定した値よりもいくらか大きく設定します。これは、再帰的な制限を超えた場合、クリーンアップ関数が入り、再帰するためにスタックが必要になるためです。

高くしすぎると、可能な限り高い制限がプラットフォームに依存するため、オーバーフローのクリーンアップ中にインタープリターがオーバーフローし、インタープリターが致命的なエラーで終了します(インタープリターはエラーで終了します。 code) "Py_FatalError("スタックオーバーフローから回復できません。 ");"。また、インタプリタが終了するため、エラーメッセージは出力されません。

CPythonでの場所

if (tstate->overflowed) {
        if (tstate->recursion_depth > recursion_limit + 50) {
            /* Overflowing while handling an overflow. Give up. */
            Py_FatalError("Cannot recover from stack overflow.");
        }
return 0;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Haskellの「何もしない」関数idが大量のメモリを消費するのはなぜですか?

分類Dev

DockerがVIRTメモリを大量に消費するのはなぜですか?

分類Dev

UIImageが大量のメモリを消費するのはなぜですか?

分類Dev

このJavaプログラムがメモリを大量に消費するのはなぜですか?

分類Dev

プログラムが大量のメモリを使用して実行されるのはなぜですか?

分類Dev

この関数が時間外に多くのメモリを消費するのはなぜですか

分類Dev

ページテーブルが大量のメモリを消費するのはなぜですか?

分類Dev

大きなJava配列を作成すると、メモリが大量に消費されるのはなぜですか?

分類Dev

QML Imageがメモリを大量に消費するのはなぜですか?アプリケーションの速度を低下させる

分類Dev

メモ化された関数がHaskellで多くのメモリを消費するのはなぜですか?

分類Dev

なぜGNUはそのようなメモリを大量に消費するのですか?

分類Dev

メモリ消費に関して:なぜ静的レットオーバー(計算された)静的変数を選択するのですか?

分類Dev

ADユーザー削除スクリプトがこのようなメモリを大量に消費するのはなぜですか?

分類Dev

JVMが指定された-Xmsよりも少ないメモリを消費するのはなぜですか?

分類Dev

この単純なシェルループが停止し、大量のメモリを消費し始めるのはなぜですか?

分類Dev

このFirebase関数が再帰的に実行されるのはなぜですか?

分類Dev

文字列の代わりに配列を使用すると、メモリ消費と実行時間が少なくなるのはなぜですか?

分類Dev

関数がパラメーターなしで実行されるのはなぜですか?

分類Dev

再帰関数で繰り返しajaxリクエストを行うとエラーが発生するのはなぜですか?

分類Dev

このコードを実行しようとすると、大量のメモリが消費されます

分類Dev

この単純な GTK3 アプリケーションが大量のメモリを消費するのはなぜですか?

分類Dev

参照がメモリを消費するのはなぜですか?

分類Dev

なぜコードは再帰関数の最後まで実行されるのですか?

分類Dev

IEがCPUを大量に消費するのはなぜですか?

分類Dev

ファイルから読み取られたnumpynarrayが大量のメモリを消費するのはなぜですか?

分類Dev

文字列によるJavaメモリリーク?なぜこれが消費されてクラッシュするのですか

分類Dev

空のJavaプログラムがメモリを消費するのはなぜですか?

分類Dev

MySQLがこれほど多くのメモリを消費するのはなぜですか?

分類Dev

再帰的な場合に「関数が定義されていません」エラーが発生するのはなぜですか?

Related 関連記事

  1. 1

    Haskellの「何もしない」関数idが大量のメモリを消費するのはなぜですか?

  2. 2

    DockerがVIRTメモリを大量に消費するのはなぜですか?

  3. 3

    UIImageが大量のメモリを消費するのはなぜですか?

  4. 4

    このJavaプログラムがメモリを大量に消費するのはなぜですか?

  5. 5

    プログラムが大量のメモリを使用して実行されるのはなぜですか?

  6. 6

    この関数が時間外に多くのメモリを消費するのはなぜですか

  7. 7

    ページテーブルが大量のメモリを消費するのはなぜですか?

  8. 8

    大きなJava配列を作成すると、メモリが大量に消費されるのはなぜですか?

  9. 9

    QML Imageがメモリを大量に消費するのはなぜですか?アプリケーションの速度を低下させる

  10. 10

    メモ化された関数がHaskellで多くのメモリを消費するのはなぜですか?

  11. 11

    なぜGNUはそのようなメモリを大量に消費するのですか?

  12. 12

    メモリ消費に関して:なぜ静的レットオーバー(計算された)静的変数を選択するのですか?

  13. 13

    ADユーザー削除スクリプトがこのようなメモリを大量に消費するのはなぜですか?

  14. 14

    JVMが指定された-Xmsよりも少ないメモリを消費するのはなぜですか?

  15. 15

    この単純なシェルループが停止し、大量のメモリを消費し始めるのはなぜですか?

  16. 16

    このFirebase関数が再帰的に実行されるのはなぜですか?

  17. 17

    文字列の代わりに配列を使用すると、メモリ消費と実行時間が少なくなるのはなぜですか?

  18. 18

    関数がパラメーターなしで実行されるのはなぜですか?

  19. 19

    再帰関数で繰り返しajaxリクエストを行うとエラーが発生するのはなぜですか?

  20. 20

    このコードを実行しようとすると、大量のメモリが消費されます

  21. 21

    この単純な GTK3 アプリケーションが大量のメモリを消費するのはなぜですか?

  22. 22

    参照がメモリを消費するのはなぜですか?

  23. 23

    なぜコードは再帰関数の最後まで実行されるのですか?

  24. 24

    IEがCPUを大量に消費するのはなぜですか?

  25. 25

    ファイルから読み取られたnumpynarrayが大量のメモリを消費するのはなぜですか?

  26. 26

    文字列によるJavaメモリリーク?なぜこれが消費されてクラッシュするのですか

  27. 27

    空のJavaプログラムがメモリを消費するのはなぜですか?

  28. 28

    MySQLがこれほど多くのメモリを消費するのはなぜですか?

  29. 29

    再帰的な場合に「関数が定義されていません」エラーが発生するのはなぜですか?

ホットタグ

アーカイブ