1
私は再帰に関する知識に隙間があります。私は基底ケースが再帰を終了すべきだと理解していますが、正しいものを選択するのは難しいです。再帰に関する知識のギャップを修正する:基本条件と状態
また、メソッドシグネチャを更新せずに状態を管理する方法を理解する上で問題があります。
たとえば、largest adjacent element products
の問題を考えてください。分割統治の私の理解は、次のとおり
1) divide the problem into smaller problems:
1.1) create a left array of the first two elements
1.2) create a right array by removing the first element
2) conquer by recursion:
2.1) repeat the function on the right array
2.2) choose a good base case to terminate
3) combine the solution
3.1) this is where things get tricky!?
3.2) for the task of multiplication, how do I persist the result
after each recursion when each new call will re-instantiate the
result list
知識にこの隙間の具体例は以下である:私が選んだbase case
リストよりも少ない2つの要素を有する場合、次いで0
を返すあります。もちろん、2つの要素の積がless than 0
の場合はexcept
となります。
には、int
の比較でエラーが発生するため、None
をベースケースに戻すと状態に問題があります。
TypeError: '>=' not supported between instances of 'int' and 'NoneType'
完全なコードは
def multiply(inputArray):
m = inputArray[0] * inputArray[1]
return m
def adjacentElementsProduct(inputArray):
# [3, 6, -2, -5, 7, 3]
if len(inputArray) <= 1:
# return 0
return None
left = inputArray[:2]
right = inputArray[1:]
result = []
result.append(adjacentElementsProduct(right))
m = multiply(left)
print(result, left, m)
if len(result) == 0:
result.append(m)
else:
if m >= result[0]:
result.insert(0, m)
return result[0]
'python'が残されAPPENDを持っていません。 'insert(0、m)'があります。また、解は単一の整数を返す必要があります。 –
@ SamHammamy fixex it。正確な結果はどうあるべきですか?私は '隣接要素の製品'を理解していない。 – gzc
出力は「21」でなければなりません:最大の要素積 –