我正在研究遞歸函數,這是我第一次不知道如何停止計算。如何停止遞歸函數?
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,因爲除此之外沒有任何選項可用。
編輯:
其實,我要的是告訴它不應該與價值的過程參數的函數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'看 –
問題是它在我的測試中是整數。 –