Search code examples
pythonfunctionvariablesrecursionglobal

Python recursion function issue


I am python beginner and at the moment I am struggling with python recursion function:

x = 10
n = 3


def rec(x,n):
    if n>0:
        #global x2
        x2 = x*n
        return rec(x2,n-1)
    else:
        return x2

# function call:
fcall = rec(x,n)

print fcall

What confuses me is that global x2 line. With it, the function is working fine returns 60 as expected, but without it I am getting an error message:

Local variable 'x2' referenced before assignment

Why is that so? Seems like once n reaches value of 3, and the else condition gets executed, it does not know what x2 is?


Solution

  • Your problem is that x2 is only a local variable, so when you call the function it doesn't know the old x2 anymore.

    By adding the global x2 you put that variable in the global space, so now the function can recognise it.

    Check this out: http://gettingstartedwithpython.blogspot.de/2012/05/variable-scope.html

    What you actually want to return is x, not x2, because you are passing the value of x2 into the next call of your recursion.

    def rec(x,n):
        if n>0:
            x2 = x*n
            return rec(x2,n-1)
        else:
            return x