2017-11-10 128 views
0

我一直在學習Python自己和遞歸是麻煩的。我們得到了一個重量2.0的首發。當單件重量= < 0.1時,我們返回一個計數。否則,將其分成2,3或4塊(數量隨機選擇)並再次發生。當所有不大於0.1時,返回碎片總數。到目前爲止我的代碼看起來像這樣。將棒打碎成小塊;遞歸步驟返回沒有用

import random as rand 

def breaker_function(weight_of_piece): 
    if weight_of_piece <= 0.1: 
     return 1 #returns one piece 
    else: 
     return breaker_function(weight_of_piece/rand.randint(2,4)) 

但是,此代碼不起作用。我通過調試器運行它,當它到達遞歸步驟時,程序隨機打破它(不小於0.1)。由於碎片不小於0.1,所以功能停止。我沒有收到錯誤。

我也曾嘗試雙遞歸如(?):

return breaker_function(breaker_function(weight_of_piece/rand.randint(2,4))) 

我也試圖在隨機件存儲在一個列表中,但只是複雜的事情,並得到了類似的結果。

測試案例:一個1.0的起始片我應該得到大約18件。

回答

0

您的函數不會返回任何內容,但1。您需要更改遞歸步驟。打入等份,然後添加的打破這些作品的結果:

else: 
    quant = rand.randint(2,4) 
    count = 0 
    for i in range(quant): 
     count += breaker_function(weight_of_piece/quant) 
    return count 

運行此10倍:

21 
22 
22 
17 
20 
25 
15 
18 
20 
17