使用递归的方法

时间:2015-04-08 23:16:43

标签: python recursion methods

我正在写一个" clean"时间"时间"类。 clean方法将采用Time对象,并确保秒数和分钟数介于0到59之间。我遇到了递归错误。以下是我到目前为止的情况:

def clean(self):
    '''Adjust Time object so that the number of seconds and minutes
       is between 0 and 59'''

    if self.S < 60:
        self.S
    else:
        self.M = int(self.S/60)+self.M
        self.S = self.S%60


    if self.M < 60:
        self.M
    else:
        self.H = int(self.M/60)+ self.H
        self.M = self.M%60


    if isinstance(self.H,float) == True:
        self.S = self.H * 3600
        self.clean()
    else:
        self.H

        return self.__str__()

2 个答案:

答案 0 :(得分:2)

在您的代码中:

if isinstance(self.H,float) == True:
    self.S = self.H * 3600
    self.clean()
else:

你不会改变自我。如果这是真的,那么它将永远是真的。我猜你要设置self.H = 0或类似的东西(因为你将它全部转换为秒)。

另外,在你的if语句中,有自我。&#39;实际上并没有做任何事情,所以你应该写:

if self.S < 60:
    self.S
else:
    self.M = int(self.S/60)+self.M
    self.S = self.S%60

作为

if self.S >= 60:
    self.M = int(self.S/60)+self.M
    self.S = self.S%60

另外,在你的递归检查中,你会破坏你以前的self.S值,你的意思是添加吗?

修改 你没有在你的问题中指明,但是从你的代码中看起来你假设时间值(S,M,H)是有效的,而你只是改变数量来获得相同的总时间,S < 60和M < 60.如果是这种情况,那么您可以通过在开始时将所有转换为秒来轻松消除递归,然后执行S和M步骤:

self.S = self.H * 3600 + self.M * 60 + self.S

self.M = int(self.S / 60)
self.H = int(self.M / 60) # or = int(self.S / 3600)

self.M = self.M % 60
self.S = self.S % 60

答案 1 :(得分:1)

它似乎是递归发生的唯一地方:

if isinstance(self.H,float) == True:
    self.S = self.H * 3600
    self.clean()

如果您self.H不是float,那么它就不会重复:

if isinstance(self.H,float) == True:
    self.S = self.H * 3600
    self.H = int(self.H)    # add this line
    self.clean()

更好的是,调整顶部的值,这样你就不需要递归了:

# move this to the first lines of your method
if isinstance(self.H,float) == True:
    self.S = self.H * 3600