I'm learning to write recursive functions in Python, and find a list can have different behaviors depending on whether I choose to use res.append(new_loc)
or res + [new_loc]
.
For example,
def solver(counter,res):
print("Entering the solver:",res)
if len(res) >= 4:return
counter += 1
res.append(counter)
solver(counter,res)
print("inner solver returned:",res)
counter += 1
res.append('haha%i'% counter)
solver(0,[])
This gives me the output
Entering the solver: []
Entering the solver: [1]
Entering the solver: [1, 2]
Entering the solver: [1, 2, 3]
Entering the solver: [1, 2, 3, 4]
inner solver returned: [1, 2, 3, 4]
inner solver returned: [1, 2, 3, 4, 'haha5']
inner solver returned: [1, 2, 3, 4, 'haha5', 'haha4']
inner solver returned: [1, 2, 3, 4, 'haha5', 'haha4', 'haha3']
The list res
acts like a recorder, and saves all the values.
However, if I change the solver
function a little bit
def solver(counter,res):
print("Just entering the solver:",res)
if len(res) >= 4:return
counter += 1
solver(counter,res+[counter])
print("inner solver returned:",res)
counter += 1
res.append('haha%i'% counter)
solver(0,[])
The output becomes
Just entering the solver: []
Just entering the solver: [1]
Just entering the solver: [1, 2]
Just entering the solver: [1, 2, 3]
Just entering the solver: [1, 2, 3, 4]
inner solver returned: [1, 2, 3]
inner solver returned: [1, 2]
inner solver returned: [1]
inner solver returned: []
In this case, why res.append('haha%i'% counter)
is not working?