2017-04-26 15 views
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))) 

答えて

0

半ば=(低+高)使用/ 2又はミッド=ハイ - (高 - 低)/ 2

+0

それらのどちらも正しい答えを与えました。 2番目のオプションは実際には最大再帰問題を引き起こしました。 次の例[0,0,0]と[2、-2、3、0、4、-7]を使用し、両方とも間違った答えを出しました。 [0,0,0]の正解は6で、[2、-2、3、0、4、-7]の正解は4です。 – Butcher

関連する問題