Home > Mobile >  Find sum of nested list using recursion
Find sum of nested list using recursion

Time:07-04

Find the sum of nested list using recursion

lst = [1,2,[3,4],[5,6]]
def findSum(values,sum,idx):
    if len(values) == idx:
        return sum
    if isinstance(values[idx],list):
       return findSum(values[idx],sum,0)
    else:
        sum = sum   values[idx]
        return findSum(values,sum,idx 1)

print(findSum(lst,0,0))

Output should be 21 but I am getting only 10 last index subarray([5,6]) not getting calculated.

Can anyone suggest me, what I am doing wrong in the logic?

CodePudding user response:

There are just some good pointers earlier about the origin codes problem, so I am not going to repeat here.

This is just a simpler approach for this problem, maybe as a reference.

A = [1, 2, [3, 4], [5,6]]


def sum_lst(A):
    total = 0
    
    for x in A:
        if isinstance(x, list):
            total  = sum_lst(x)
        else:
            total  = x
            
    return total
    
print(sum_lst(A))      # 21

CodePudding user response:

You can recurse through the list as shown below

def recur_sum(lst):
    s = 0
    for x in lst:
        if type(x) == list:
            s  = recur_sum(x)
        else:
            s  = x
    return s


lst = [1,2,[3,4],[5,6]]
print(recur_sum(lst))

EDIT: The problem with OP's code is, the code is not moving forward after its done processing a sublist and returns from there.

CodePudding user response:

Just for fun: a recursive approach using reduce.

A (mathematical) recursion is defined by an initial value and a relationship between a certain terms and its previous ones. The initial value can be specified by the initializer parameter of reduce and, in this case, it is set to 0. The recursive function can be passed as a parameter to reduce.

Notice:

  • no for-loop is required
  • only two nested level list supported
from functools import reduce


def recursive_relationship(i, j):
    if isinstance(j, list):
        if j:
            return recursive_relationship(i j[0], j[1:])
        else:
            return i
    return i   j


lst = [1,2,[3,4],[5,6], [8]]
#lst = [[1, 2], [1, 2,3], [1]]

print(reduce(recursive_relationship, lst, 0))
  • Related