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?
foo
is a recursive calculation of "2 to the x power", for non-negative integer values of x. (If it had multipliedfoo(x-1)
byx
instead of by2
, it would have calculated "x factorial" instead.) – Kevin J. Chase yesterday