【问题标题】:Confused about recursion and how to make return print对递归以及如何返回打印感到困惑
【发布时间】:2016-04-24 16:31:54
【问题描述】:

这是我的家庭作业。但正如我之前在这个网站上读到的,人们告诉你先试试看。我现在试图理解递归,但我就是不明白。我在想是否有人可以帮助我解决这个问题,这样我就可以了解整个概念,然后解决我剩下的作业。

所以这里的想法是用户输入金字塔中有多少层罐头。有了这些信息,程序应该能够计算出整个金字塔中有多少罐头。层数为 1 - 4 - 9 - 16,依此类推。

正如我之前所说,我不希望有人给我写代码,我真的很想了解递归。

def cans(layers):
    if layers == 0:
       return 1
    else:
       return layers * cans(layers-1)

layers = raw_input("How many layers are there?: ")
print cans

【问题讨论】:

    标签: python-2.7 recursion


    【解决方案1】:

    您在这里错过了递归的要点。对于每一层,计算很简单——它只是层数的平方。但是,要计算整个金字塔中的罐头数量,可以使用递归。

    这是一种思考方式:

    • N 层金字塔中有多少罐? N2 加上 N-1 层金字塔中的罐头数。
    • 那么在一个 N-1 层的金字塔中有多少罐? (N-1)2 加上 N-2 层金字塔中的罐头数。
    • 那么在一个有 N-2 层的金字塔中有多少罐? (N-2)2 加上 N-3 层金字塔中的罐头数。
    • 依此类推...直到达到最终条件,这可能是一个空金字塔(一个有 0 层的金字塔)。

    如果我们用python表达同样的逻辑:

    def cans(layers):
        if layers == 0:
           return 0
        else:
           return layers**2 + cans(layers-1)
    

    【讨论】:

    • 好的,所以 else 是计算罐头的那个,如果层数 == 0:停止计数对吗?我添加了 layers = input("How many layers are there?") 但 python 没有返回任何内容?
    • @benitso 是的,你明白了它的要点。请注意,您应该打印cans(layers) 而不仅仅是cans,正如您当前的问题所示。如果这不是问题,请使用当前代码编辑您的帖子,让我们看看那里出了什么问题
    • 当我打印 cans(layers) 时它起作用了。几个月来我一直在尝试理解递归,而你让我在短短 2-3 小时内意识到/理解(希望)它的全部内容。谢谢你,先生!我差点放弃学习 Python,谢谢!
    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 2013-05-15
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多