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()