Ok, so this piece of code is from a practice question at my school. We are to mentally parse the code and check the answer.
When I first parsed it, I got 4. I copied the code and ran it through IDLE and got 8. I ran the debugger and saw that the else: return is looping the if else statement until x == 0 and then it returns 1.
I do not understand how return 1 is coming out to 8.
def foo(x=5):
if x == 0:
return 1
else:
return 2*foo(x-1)
print(foo(3))
I understand that it is calling foo(x-1) inside the function foo(x=5) which makes it check if else again and again until x == 0 then it returns 1. How does return 1 end up printing 8?
foois a recursive calculation of "2 to the x power", for non-negative integer values of x. (If it had multipliedfoo(x-1)byxinstead of by2, it would have calculated "x factorial" instead.)