0
私が書いているコードに関する質問があります。これは、配列内のスライスの数をゼロにする数を取得するためです。しかし、私は再帰を使ってPythonでこれを行うことができるようにしたいと思います。私のコードを見て、あなたが何かを見たら教えてください。反復的なアプローチと比べて正しい答えが得られません。分割と征服 - ゼロサムスライスのカウントを取得
def sumzeros(A, low, mid, high):
leftsum = 0
rightsum = 0
counter = 0
for i in range(low, mid+1):
leftsum += A[i]
for j in range(mid+1, high+1):
rightsum += A[j]
if leftsum + rightsum == 0:
counter += 1
return counter
def solution(A, low, high):
if low == high:
if A[low] == 0:
return 1
else:
return 0
else:
mid = (low + high) // 2
left = solution(A, low, mid)
right = solution(A, mid+1, high)
cross = sumzeros(A, low, mid, high)
return cross + left + right
print('Recursive solution: Number of sum zeros = {}'.format(solution(A, 0, len(A) - 1)))
それらのどちらも正しい答えを与えました。 2番目のオプションは実際には最大再帰問題を引き起こしました。 次の例[0,0,0]と[2、-2、3、0、4、-7]を使用し、両方とも間違った答えを出しました。 [0,0,0]の正解は6で、[2、-2、3、0、4、-7]の正解は4です。 – Butcher