我必须为一门课程做一项练习,特别是对于我来说,这不是很有效。问题很简单,我可以解决,但是我不确定是否允许我执行多个功能,或者我是否只打算执行一个功能。我希望只使用一个功能。
我必须编写一个简单的函数,该函数以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并输出结果。但是正如我所说,我不确定是否可以写函数。有人可以告诉我为什么我的理论不起作用吗?
在每一行中,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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句