0

Im studying algorithims and data structures in python and came across the prefix averages problem. Where i have to return a sequence A where A[j] is the average of elements S[0]+S[1]+...S[j] of another array S.

I have solved it iteratively and attempted a recursive solution which works only when i use print to display the result from inside the function. If i try to use return to return the result and use print outside at the function call, i get None

#iterative solution
def prefix_average(nums):
    A = []
    for x in range(1,len(nums)+1):
        prev = nums[:x]
        average = sum(prev)/len(prev)
        A.append(average)
    return A

print(prefix_average([2,3,4,2,6,7]))

#recursive solution
def prefix_average_recursive(nums):
    def helper(A = [],value=1):
        if value == len(nums)+1:
            return A
            #returns None, however works properly when called with print()
        else:
            prev = nums[:value]
            average = sum(prev)/len(prev)
            A.append(average)
            helper(A,value+1)
    helper()

print(prefix_average_recursive([2,3,4,2,6,7]))

Why cant i return from within the recursive function? ----------EDIT: NOOB MISTAKE-------------

#recursive solution- works great

def prefix_average_recursive(nums):
    def helper(A = [],value=1):
        if value == len(nums)+1:
            return A
            #returns None, however works properly when called with print()
        else:
            prev = nums[:value]
            average = sum(prev)/len(prev)
            A.append(average)
            return helper(A,value+1)
    return helper()
Noble Eugene
  • 523
  • 1
  • 5
  • 15

0 Answers0