0
私は、オンラインクラスの再帰的なマージフローを実装しようとしており、小さな問題があります。再帰的なmergeflowの最大再帰を超過
分割統治は、このような正常に動作するコード:
def __recursive_mergesort(arr, aux, lo, hi):
if hi <= lo:
return
mid = lo + (hi - lo) // 2
__recursive_mergesort(arr, aux, lo, mid)
__recursive_mergesort(arr, aux, mid + 1, hi)
# Call merge here...
def mergesort(x):
aux = [0] * len(x)
__recursive_mergesort(x, aux, 0, len(x) - 1)
return x
しかし、私は:
def __recursive_mergesort(arr, aux, lo, hi):
if hi <= lo:
return
mid = lo + (hi - lo) // 2
__recursive_mergesort(arr, aux, lo, mid)
__recursive_mergesort(arr, aux, mid, hi)
# Call merge here...
def mergesort(x):
aux = [0] * len(x)
__recursive_mergesort(x, aux, 0, len(x))
return x
これは最大の再帰の深さを超えています。私が知る限り、私はロジックを変更せず、これをデバッグするのに問題があります。もちろん、ここに潜んでいる微妙なバグではありませんが、私の人生では、なぜ最初のバージョンが動作するのか、2番目のバージョンではないのか分かりません。
ありがとうございました。私は 'if hi-1 <= lo: return'が動作するように条件を変更しました。 – Luca