2017-11-10 33 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