Skip to content Skip to sidebar Skip to footer

Python Recursive Function Doesn't Return

I'm trying to sharpen my noob Python skills by trying a problem my son has in his college CS class. The goal is to create a function that uses recursion to process a list. The func

Solution 1:

You need to actually return your RecursiveProcess. Look below at your modified code.

You aren't exactly doing anything recursively if all you do is call the function and store the value in ListIn2. You will keep overwriting your previous data. By returning, you will end up getting your recursive behaviour:

defRecursiveProcess(ListIn2, target): #Recursive function that adds to target value the value to its rightif target > -1:  #stop function if index is below 0
        ListIn2[target] = ListIn2[target] + ListIn2[target+1]  #Add value to the right of target to the target valuereturn RecursiveProcess(ListIn2, target-1) #Call the function again with lower taget value to process the next valueelse:
        return ListIn2  #return the changed list

l = [5, 10, 11, 6, 7, 1, 2, 4, 6, 7]
d = RecursiveProcess(l, len(l)-2)
print(d) # [59, 54, 44, 33, 27, 20, 19, 17, 13, 7]

Solution 2:

The problem is that you don't actually do a recursion (every call to the same function returns the result) but since lists are mutable you don't need to:

defProcessList(ListIn):
    RecursiveProcess(ListIn, len(ListIn)-2) #this will change the list in place!return ListIn

that's all to get it working like expected. Because each element is updated in the "recursion" so there is no need to pass the pointer to the list around. And also the result is what is expected:

# [59, 54, 44, 33, 27, 20, 19, 17, 13, 7]

Solution 3:

You aren't returning in your general case. Try:

def RecursiveProcess(ListIn2, target): 
    if target > -1:
        ListIn2[target] = ListIn2[target] + ListIn2[target+1]  
        ListIn2 = RecursiveProcess(ListIn2, target-1) 
        return ListIn2 #Actually need to return in the general caseelse:
        return ListIn2  

Post a Comment for "Python Recursive Function Doesn't Return"