You can update your code to:
def SumSkip37(numList, my_sum = 0): # avoid using sum
if numList:
i = numList.pop()
if i % 3 == 0 or i % 7 == 0:
return SumSkip37(numList, my_sum=my_sum) # pass the unchanged sum
else:
return SumSkip37(numList, my_sum=my_sum+i) # pass the sum + i
else:
return my_sum
NB. I tried to stay as close as possible to the original, but you can simplify greatly!
To avoid mutating the input:
def SumSkip37(numList, my_sum = 0):
if numList:
if numList[0] % 3 != 0 and numList[0] % 7 != 0:
my_sum += numList[0]
return SumSkip37(numList[1:], my_sum=my_sum)
return my_sum
print(f'The result is {SumSkip37(numList)}.')
Better approach than the alternative above suggested by @Stef to run in linear time:
def SumSkip37(numList, my_sum=0, idx=0):
if idx >= len(numList):
return my_sum
elif numList[idx] % 3 != 0 and numList[idx] % 7 != 0:
return SumSkip37(numList, my_sum + numList[idx], idx + 1)
return SumSkip37(numList, my_sum, idx + 1)
Also, recursion is overkill here, better use a short generator expression:
sum(i for i in numList if i%7!=0 and i%3!=0)