Consider the code below. It involves application of a very interesting python concept of using default argument during recursion[reversing a list] A = [1,2,3,4]
def recur(A,Q=[]):
if len(A)==1:
Q.append(A[0])
return
recur(A[1:],Q)
Q.append(A[0])
return Q
print(recur(A)) # 4 3 2 1
Issue is, when I call this function again, Q will not be empty. Is there a way I can set Q=[] when this recursive call finishes ?
NOTE: my intent is not to reverse a list, it's just for demonstration. Thanks
CodePudding user response:
When you first run the script, you're initializing and making Q
immutable, regardless of calling the function or future input. You'll need to recreate Q
as a new list every time within the function.
Try this:
def recur(A,Q=None):
if Q == None:
Q = []
if len(A)==1:
Q.append(A[0])
return
recur(A[1:],Q)
Q.append(A[0])
return Q
print(recur([4, 3, 2, 1])) # 1 2 3 4
print(recur([1, 2, 3, 4])) # 4 3 2 1
CodePudding user response:
Or completely without a default arg:
def _recur(A, Q):
...
def recur(A):
return _recur(A, [])