【问题标题】:Recursive division within a class类内的递归除法
【发布时间】:2014-02-06 15:49:28
【问题描述】:

我正在尝试练习 OOP 和递归,但遇到了一些麻烦。我认为它的递归方面是正确的,但我构建类的方式是错误的。

应该如何工作:
它应该从 6 中减去 1,直到 x = 0。每次将 1 添加到索引。当 x 等于 0 时,函数应该返回索引。

哪里出错了:
下面的代码说我有一个错误,因为 divide 接受三个参数,而我只提供了两个。但我认为 self 并不是一个真正的论点。这只是必须在课堂上完成的事情。

如何使以下代码按预期工作?

class Division(object):

    def __init__(self, x, y):
        self.index = 0
        self.x = x
        self.y = y

    def divide(self, x, y):
        self.index += 1
        if self.x <= 0:
            return self.index
        return divide(self.x-self.y, self.y)

print(Division.divide(6,1))

编辑(修订代码):
现在我收到一个没有定义除法的错误?

class Division(object):

    def __init__(self):
        self.index = 0

    def divide(self, x, y):
        self.index += 1
        if x <= 0:
            return self.index
        return divide(x-y, y)

print(Division().divide(6,1))

第二次编辑: 我想我想通了。我不得不在divide方法递归返回上再次添加创建Division的实例。我的输出是错误的。这就是说 self.index 等于一。可能是因为当我创建类的新实例时,索引设置为 0。我该如何克服这个问题?

最终代码:

class Division(object):

        def __init__(self):
            self.index = 0

        def divide(self, x, y):
            self.index += 1
            if x <= y:
                return self.index
            return self.divide(x-y, y)

print(Division().divide(6,1))

【问题讨论】:

  • Division(1, 2).divide(6,1),你需要先创建一个实例。
  • 请注意,您没有在divide 中使用xy(不是根本原因,只是对审查设计的提示)。
  • 你必须调用self.divide ...没有全局divide方法...
  • 旁注经验法则:当你的类有两个方法时,其中一个是__init__,你不应该使用一个类。
  • @JoranBeasley 谢谢。这让我得到了我想要的输出。

标签: python oop loops recursion


【解决方案1】:

我不明白你为什么要在这里有一个对象...它模拟什么?所以这里是一个没有对象的解决方案

def divide(a, b, q = 0):
    if a < b:
        return q
    return divide(a-b, b, q+1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多