0

我正在练习考试并试图弄清楚这一点。我只是不完全用 add 方法做什么。这是我到目前为止所拥有的:

class recursion:
    def __init__(self, lst=[]):
        self.lst = lst

    def add(self, x, y):
        return x + y

    def recurs(self):
        if len(self.lst) == 1:
            return lst[0]
        else:
            return self.lst[0].add(self.recurs(lst[1:])
4

3 回答 3

4

假设您正在尝试递归获取列表的总和:

本质上,recursive_sum_helper用更小的列表来调用自己:

总和(1, 2, 3, 4) = 1+总和(2,3,4) = 1+( 2 + 总和(3,4) ) = ...

class recursive_summer:
    def __init__(self, lst=[]):
        self.lst = lst
    def recursive_sum(self):
        return self.recursive_sum_helper(self.lst)
    def recursive_sum_helper(self, a_lst):
        if len(a_lst) == 1:
            return a_lst[0]
        else:
            first_element = a_lst[0]
            list_without_first_element = a_lst[1:]
            return first_element + self.recursive_sum_helper( list_without_first_element )

r = recursive_summer([1,2,3,4])
r.recursive_sum()

输出为 10。

希望这有助于解决您要解决的任何问题。

于 2012-05-11T06:05:09.440 回答
1

这是这样做的递归方式,但更干净:

它使用列表中的弹出方法

class rec(object):
    def __init__(self):
        self.sum = 0

    def recur(self, list):
        if len(list) > 0:
            self.sum += list.pop()
            self.recur(list)
        else:
            return self.sum

使用:

>>> from code import rec
>>> a = rec()
>>> b = [1,2,3]
>>> print a.recur(b)
6
于 2012-05-11T07:05:34.583 回答
0

另一种无需递归即可获得列表总和的方法,但更快更有效:

>>> a = [1,2,3]
>>> sum(a)
6
>>>
于 2012-05-11T06:12:39.753 回答