递归函数不返回我想要的

马修斯

我必须为一门课程做一项练习,特别是对于我来说,这不是很有效。问题很简单,我可以解决,但是我不确定是否允许我执行多个功能,或者我是否只打算执行一个功能。我希望只使用一个功能。

我必须编写一个简单的函数,该函数以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乘数应用于两个:

  • 当前水平的罐头数量;
  • 上一级罐体积不是数量)。

这意味着该乘数将反复应用于某些罐头,从而有效地减小了每个罐头上的体积。我在这里建议两个选择之一:

  1. 将其分为两个功能,其中一个给您提供易拉罐的数量,另一个给您提供总体积。要么
  2. 移动倍增器,使其仅在当前水平上倍增罐头

因此,要么:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

递归函数不返回我想要的

来自分类Dev

函数不返回我想要的值

来自分类Dev

递归函数不返回

来自分类Dev

Python递归函数不返回

来自分类Dev

Python递归函数不返回

来自分类Dev

Python递归函数不返回

来自分类Dev

递归函数不返回数组

来自分类Dev

SQL查询不返回我想要的东西

来自分类Dev

sed命令不返回我想要的

来自分类Dev

为什么当我递归调用函数时,我的函数不返回以前的值,而不返回新的值?

来自分类Dev

递归函数不返回对象值之和

来自分类Dev

函数“递归返回”的“类型不匹配”

来自分类Dev

为什么我的递归函数不返回列表的最大值

来自分类Dev

为什么我的递归二进制搜索函数不返回任何内容?

来自分类Dev

为什么我的递归JavaScript函数不返回字符串?

来自分类Dev

PHP变量在循环中不返回我想要的HTML值

来自分类Dev

bash:compgen -c 不返回我想要的输出

来自分类Dev

递归函数不递归

来自分类Dev

random.randint函数不按我想要的方式工作

来自分类常见问题

为什么我的递归函数返回None?

来自分类Dev

递归地平滑列表-为什么我的代码没有返回我想要的?

来自分类Dev

递归函数在Python中不返回任何值

来自分类Dev

递归函数能够打印,但是不返回正确的值

来自分类Dev

模型中的递归函数不返回任何内容-Laravel

来自分类Dev

php递归函数不返回布尔值

来自分类Dev

递归异步/等待请求不返回调用函数

来自分类Dev

我可以递归调用异步函数而不溢出堆栈吗?

来自分类Dev

无法返回我想要的列表

来自分类Dev

我用于搜索元素的递归函数始终返回nil