0

So I have tried to create a recursion function which returns factorial of a number. I cant make it return y but I dont know why, can someone explain?

y = 1
def factorial(x):
    global y
    if x <= 1:
        print(y)
        return y
    else:
        y = y * x
        factorial(x-1)

def hey(): #random funtion which can return y but factorial cant.
    return y

print(factorial(3))
print(hey())

result in terminal:

6 #factorial can print y
None# Cant return y
6 # Other function can return y
wjandrea
  • 28,235
  • 9
  • 60
  • 81
paf100
  • 1

3 Answers3

1

You need to propagate the return:

def factorial(x):
    global y
    if x <= 1:
        print(y)
        return y
    else:
        y = y * x
        return factorial(x-1)

Also, there's no need to use a global variable, a simpler solution:

def factorial_recursive(x):
    if x <= 1:
        return 1
    else:
        return x * factorial_recursive(x-1)
Damião Martins
  • 1,402
  • 10
  • 17
0

you forgot the return before the recursion, and also why are you using a global variable ??, here's a simpler version without your y:

def factorial(x):
    if x <= 1:
        return 1
    else:
        return x * factorial(x-1)

print(factorial(3))

output:

6
mrCopiCat
  • 899
  • 3
  • 15
0

Thank you guys, I forgot to propagate the return. I was accually using a global variable just to make things more interesting, testing, and it worked. Now I understand the code.

paf100
  • 1