[這是一個任務,請不要給我的全部代碼。] 我需要寫接收兩個列表,一個與棒的股票功能(它們的大小而變化),以及一個與所述順序,並返回任一「假,[]」(如果這是不可能的回答順序)或「真,how_to」,其中how_to是在其中每個項目是所述杆的所使用的索引的列表按順序供應相應的物品。變化對棒切割(棒的大小可以改變)
例如:
stock = [100, 150]
order = [30, 60, 90, 60]
how_to = [0, 0, 1, 1]
任何解決方案,它的工作原理是接受([0,0,1,1],[0,1,1,0],[1,1,0,1]等)。該函數必須是遞歸的。
how_to = []
def process(stock, order):
stock_size = 0
order_size = 0
for i in order:
order_size += i
for i in stock:
stock_size += i
if order_size > stock_size:
return False, []
elif len(order) == 0:
return True, how_to
else:
for i in range(len(stock)):
if len(stock) > 0:
if stock[i] >= order[0]:
stock[i] -= order[0]
how_to.append(i)
del order[0]
process(stock, order)
else:
return True, how_to
return False, []
到目前爲止,這是我寫的。但是,只有當how_to中的項目增加時(例如,解決方案使用庫存的順序出現),它才起作用。如過程([60,70,50],[45,5,25,30,55])不起作用。我需要幫助解決它。
我知道我的解決方案不是動態的,但這是我能想出的。
有一些要求: (1)我不能在列表進行排序。 (2)我不能在函數中添加另一個參數。
此代碼不是遞歸的。它需要是一個函數'可行的(stock,order,how_to)',它自己調用它,每次從列表'order'中取出一個元素。 – smci
@smci how_to是一個全局變量,所以它做同樣的事情(股票,訂單,how_to)會做,我猜。它是遞歸的,因爲它有一個基本的例子(順序是空的),它會調用它自己,每次它接近基本情況(通過檢查後刪除一個順序元素),不是嗎? – Bruna
在遞歸方法中,沒有'全局變量'。你的遞歸函數只會傳播'how_to'作爲其結果。事實上,你不需要返回一個元組'真,how_to',因爲我們可以從'how_to'非空的事實推斷它是可行的。我將在一個答案中勾畫出來。 – smci