班级内的递归分裂



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

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

我遇到错误:
以下代码说我有错误,因为Divide接受三个争论,而我只提供了两个争论。但是我认为自我并不是真正的论点。这只是必须在课堂上完成的事情。

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

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))

第二个编辑:我想我想了。我必须在划分方法递归返回中再次添加创建一个划分实例。我的输出是错误的。这是说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))

我不明白为什么要在这里拥有一个对象...它是什么建模?因此,这是一个没有对象的解决方案

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

最新更新