我正在尝试练习OOP和递归,但我遇到了一些麻烦。我认为它的递归方面是正确的,但我构建类的方式是错误的。
它应该如何运作:
它应该从6中减去1,直到x = 0.每次加1到索引。当x等于0时,函数应该返回索引。
我出错的地方:
下面的代码说我有一个错误,因为除非我提供了两个,否则接受三个争论。但我认为自我并不是一个真正的争论。这只是必须在课堂上完成的事情。
如何使下面的代码按预期工作?
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等于1。可能是因为当我创建类的新实例时,索引设置为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))
答案 0 :(得分:0)
我不明白为什么你想在这里拥有一个物品......它的模型是什么?所以这是一个没有对象的解决方案
def divide(a, b, q = 0):
if a < b:
return q
return divide(a-b, b, q+1)