我必须为一门课程做一个练习,特别是这个练习并不适合我。问题很简单,我有一个解决方法,但我不确定我是否可以拥有多个功能,或者我是否只想拥有一个功能。我希望这只能使用一个函数。
我必须编写一个简单的函数,它将n个图层作为参数并计算总共多少升汤(它必须是一个递归函数)。这些层是罐子的文字层,工作方式如下:顶层有1 ^ 2罐,第二层有2 ^ 2,第三层有3 ^ 2,依此类推。
这是成功计算n层中罐数的函数:
def lager(n):
if n<1:
return 0
else:
return n**2+lager(n-1)
该函数返回例如5,其中n = 2,依此类推。 一个人可以包含0.407150407905升的汤,所以我应该将这个函数的结果与那个相加?所以我想为什么我不能在同一个功能中做到这一点?我尝试将最后一行编辑为:
return (n**2+lager(n-1))*0.407150407905
但由于某些原因(我不明白),它不适用于大于1的图层数。
因为我没有让它工作,所以我只是保留了上面的函数并创建了一个新函数,它获取返回值并将其乘以0.407150407905并打印结果。但正如我所说,我不确定我是否被允许写入函数。有人能告诉我为什么我的理论不起作用吗?
答案 0 :(得分:3)
在每行n
中,您有n**2
个罐,每个卷0.407150407905
升。但是,您当前的函数会将volume
乘数应用于:
这意味着乘数被重复应用于某些罐头,有效地减少了每个级别的容量。我建议在这两个选择中选择一个:
因此:
def cans(layers):
if layers < 1:
return 0
return (layers ** 2) + cans(layers-1)
def lager(layers=5, volume=0.407150407905):
return cans(layers) * volume
或:
def lager(layers=5, volume=0.407150407905):
if layers < 1:
return 0
return (volume * (layers ** 2)) + lager(layers-1)
答案 1 :(得分:0)
您的方法不起作用,因为因子0.407...
在递归计算中的错误位置使用。使用两个步骤的方法更清楚:首先计算罐数,然后将罐数与罐容量相乘。