私は現在、URL リストであるキー セットからコンパクトなトライを構築するコードを書いています。次に、このデータ構造を以下のような再帰的なトライ表現に格納します。
T = |L| A B
|L| is the number of leaves of a left subtrie
A is a left subtrie
B is a right subtrie
これがPythonコードの私の部分です。
def leftLeaves(self, node):
if node.isLeaf():
return 1
else:
return self.leftLeaves(node.left) + self.leftLeaves(node.right)
def toBitStream(self, node):
if node.isLeaf():
return [node.path.length(), node.path, -1]
else:
L = node.left
R = node.right
leftLeaves = self.leftLeaves(L)
return [node.path.length(), node.path, leftLeaves] + self.toBitStream(L) + self.toBitStream(R)
このスクリプトを実行すると、遭遇します
RuntimeError: 最大再帰深度を超えました。
でも、小さいサイズのキーセットを入力しても問題ありません。
実行時エラーは、Python がスタック オーバーフローを回避するために再帰呼び出しの深さを制限していることが原因であることを知っています。
sys.setrecursionlimit 呼び出しを使用する以外に、これを解決する他の解決策はありますか (たとえば、反復プロシージャへの変換)? セグメンテーション違反(コアダンプ)が出ます。