将棒打碎成小块;递归步骤返回没有用
问题描述:
我一直在学习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件。
答
您的函数不会返回任何内容,但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