我正在尝试练习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)