#32186
Applek
Participant

ご回答ありがとうございます。御厚意、感謝しております。
この方法でいずれも単純な行数では動作はしましたが以下の問題で私のやりたいことが出来る代替にはなりませんでした。

行が多いと
Maximum call stack size exceeded
このようなエラーが出ました。

それから
for( i = 0; i < 20; ++i )
このようなコードがあると組み合わせて使えないようです。
以前の方法では動作していたのでなんとかなりませんでしょうか?
このままですとEmEditorでできることに大幅な制限が出来ます。

Geminiの回答では以下のように出ました。
「Maximum call stack size exceeded」は、プログラミングにおいて、関数の呼び出しが深くなりすぎた場合に発生するエラーです。

スタックとは

プログラムが関数を呼び出すとき、その関数の実行に必要な情報(引数、ローカル変数、戻り先アドレスなど)が「スタック」と呼ばれるメモリ領域に一時的に保存されます。関数が終了すると、スタックから情報が取り除かれ、呼び出し元の関数に戻ります。

エラーの原因

このエラーが発生する主な原因は、以下の2つです。

再帰呼び出しの無限ループ: 関数が自分自身を呼び出す「再帰呼び出し」において、終了条件が正しく設定されていない場合、関数が無限に呼び出され続け、スタックが溢れてしまいます。
非常に深い関数呼び出し: 再帰呼び出しでなくても、関数が非常に深くネストして呼び出される場合、スタックが溢れることがあります。
エラーの解決方法

このエラーを解決するには、以下の方法を試してみてください。

再帰呼び出しの終了条件を見直す: 再帰呼び出しを使用している場合は、必ず終了条件が正しく設定されているか確認してください。
再帰呼び出しをループ処理に置き換える: 再帰呼び出しが必須でない場合は、ループ処理に置き換えることで、スタックオーバーフローを回避できる場合があります。
関数の呼び出し回数を減らす: 関数呼び出しのネストが深すぎる場合は、コードの構造を見直し、関数の呼び出し回数を減らすことを検討してください。
スタックサイズを増やす: 環境によっては、スタックサイズを増やすことでエラーを回避できる場合がありますが、根本的な解決にはなりません。

以下は、再帰呼び出しの無限ループによって「Maximum call stack size exceeded」が発生する例です。

copy
def recursive_function():
recursive_function()

recursive_function()
この例では、recursive_function関数が自分自身を無限に呼び出し続けるため、スタックが溢れてエラーが発生します。

まとめ

「Maximum call stack size exceeded」エラーは、関数の呼び出しが深くなりすぎた場合に発生するエラーです。再帰呼び出しの無限ループや、非常に深い関数呼び出しが主な原因です。エラーを解決するには、再帰呼び出しの終了条件を見直したり、ループ処理に置き換えたり、関数の呼び出し回数を減らすなどの対策が必要です。