VPNTIME
VPNTIME

Reputation: 761

Using recursion in a class

I'm practicing for an exam and trying to figure this out. I'm just not exactly what to do with the add method. This is what I have so far:

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

Upvotes: 0

Views: 182

Answers (3)

Dmitry Zagorulkin
Dmitry Zagorulkin

Reputation: 8548

it's recursion way to do this, but more clean:

it uses pop method from list

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

using:

>>> from code import rec
>>> a = rec()
>>> b = [1,2,3]
>>> print a.recur(b)
6

Upvotes: 1

Dmitry Zagorulkin
Dmitry Zagorulkin

Reputation: 8548

another way to get sum of the list without recursion, but more faster and effective:

>>> a = [1,2,3]
>>> sum(a)
6
>>>

Upvotes: 0

user
user

Reputation: 7333

Assuming you're trying to recursively get the sum of the list:

Essentially, recursive_sum_helper keeps calling itself with smaller lists:

sum(1, 2, 3, 4) = 1+sum(2,3,4) = 1+( 2 + sum(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()

The output is 10.

Hope this helps with whatever problem you're trying to solve.

Upvotes: 4

Related Questions