私は再帰関数に取り組んでいます。計算を止める方法がわからないのは初めてです。再帰関数を停止する方法はありますか?
val = [[12, 11, 3, 38], [13, 18, 49, 41], [12, 17, 33, 45], [45, 36, 32, 33]]
def rec(n, o1, o2, o3, o4):
if n==1: # BECAUSE IN CASE THAT N==1, THERE IS JUST ONE ARGUMENT WITH VALUE 1, OTHER ARGUMENTS SHOULD HAVE VALUE 0
if o1==1:
return val[0][0]
elif o2==1:
return val[0][1]
elif o3==1:
return val[0][2]
else:
return val[0][3]
return max(rec(n - 1, o1 - 1, o2, o3, o4) + val[n][0],
rec(n - 1, o1, o2 - 1, o3, o4) + val[n][1],
rec(n - 1, o1, o2, o3 - 1, o4) + val[n][2],
rec(n - 1, o1, o2, o3, o4 - 1) + val[n][3])
4つの穴に最適な分布を計算する必要があります。したがって、各穴に最大値の合計があります。 val
リストはこの告げる:val
[0]穴のために、私は価格val[0][0]
とそこに第一の項目を置くことができるなど
を問題が禁止されている数回の反復負の数字の後に持ってo
値ということです。
たとえば、rec(1,0,0,50,0)
は、これ以外のオプションがないため、50にする必要があります。
EDITは:0
のでrec(2,0,1,0,1)
あなたはそれが到達したことを確認する必要がありmax(rec(1,0,0,0,1)+val[2][1], rec(1,0,1,0,0) + val[2][3])
する上記のリビジョンレベルで相殺だろう戻ってくださいました。 nが1でなければ、私はrec(n-1 ...)を呼び出すので、それは各反復で減少するはずです。 –
はい、でもそれは1に等しいとは限りません--->そのテストを 'n <1'に変更して –
と表示することは問題ではありません。 –