Hello,
I am practicing on factorial using Recursive function. I am facing an issue here. Kindly correct me.
'''Recursive Function'''
def factorial(n):
if n == 0:
result = 1
else:
result = n * factorial(n - 1)
print("the factorial of {} is {}".format(n, result))
return result
factorial = factorial(5)
Output:
the factorial of 0 is 1
the factorial of 1 is 1
the factorial of 2 is 2
the factorial of 3 is 6
the factorial of 4 is 24
the factorial of 5 is 120
120
Sorry, I got it, I forgot to give factorial while calling. Once added, it is resolved. I have another question please. once it comes to
result = n * factorial(n - 1), isn't it that, it should go to def factorial(n): again (the first line), why is it printing
print("the factorial of {} is {}".format(n, result)). I hope you understand what I am trying to ask. What I meant is, under else statement, since it is factorial(n - 1), it is supposed to go function definition, why is it printing the next statement called print ("the factorial of {} is {}".format(n, result))
your code
'''Recursive Function'''
def factorial(n):
if n == 0:
result = 1
else:
result = n * factorial(n - 1)
print("the factorial of {} is {}".format(n, result))
return result
factorial(5)
, provided here works fine for me
Output:
the factorial of 0 is 1
the factorial of 1 is 1
the factorial of 2 is 2
the factorial of 3 is 6
the factorial of 4 is 24
the factorial of 5 is 120
however, your traceback suggest you have following line in the code you run
factorial(n) == 1
Hi Buran,
I updated the post, it is working fine, but I have a new question, kindly look at it.
your initial code was fine and working. You were running different code, with following line
factorial(n) == 1
as suggested by the traceback, which is now removed from your post!
Error:
Traceback (most recent call last):
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3522, in <module>
factorial(5)
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3519, in factorial
result = n * factorial(n - 1)
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3519, in factorial
result = n * factorial(n - 1)
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3519, in factorial
result = n * factorial(n - 1)
[Previous line repeated 2 more times]
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3517, in factorial
factorial(n) == 1
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3517, in factorial
factorial(n) == 1
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3517, in factorial
factorial(n) == 1
[Previous line repeated 990 more times]
File "C:/Users/spali/PycharmProjects/BeginnerLife/RealPractice/practice.py", line 3516, in factorial
if n == 0:
RecursionError: maximum recursion depth exceeded in comparison
your changes now are (i) BAD - with your line
factorial = factorial(5)
now name
factorial
has value of 5! and the function is no longer available to you (you overwrite the name
factorial
and (ii) the output show that you have more code, i.e. print(factorial) in order to produce
120
as last line of output.
As to your question - first time when it will reach line 7
print("the factorial of {} is {}".format(n, result))
is wehn n==0, that is why the order is 0 to 5, not the other way around.
I guess you can use this site to visualise the execution and get better understanding what's going on
http://www.pythontutor.com/visualize.html#mode=edit
This might be helpful as it ha line numbers
'''Recursive Function'''
def factorial(n): #line 1
if n == 0: #line 2
result = 1 #line 3
else: #line 4
result = n * factorial(n - 1) #line 5
print("the factorial of {} is {}".format(n, result))#line 6
return result #line 7
factorial = factorial(5) #line 8
print(factorial) #line 9
my question is, in line 5, when it is calling factorial(n - 1), isn't it supposed to go to line 1? why is it printing the statement under line 6. Isn't it how it works? If it is coming to line 6, why is it not going to line 7?
(Aug-25-2020, 02:29 PM)spalisetty06 Wrote: [ -> ]Hi Buran,
I updated the post, it is working fine, but I have a new question, kindly look at it.
Thank You Buran for the elongated reply. Thanks again, but this code is working perfectly.
def factorial(n): #line 1
if n == 0: #line 2
result = 1 #line 3
else: #line 4
result = n * factorial(n - 1) #line 5
print("the factorial of {} is {}".format(n, result))#line 6
return result #line 7
factorial = factorial(5) #line 8
print(factorial)
my question is, in line 5, when it is calling factorial(n - 1), isn't it supposed to go to line 1? why is it printing the statement under line 6. Isn't it how it works? If it is coming to line 6, why is it not going to line 7?
don't add line numbers as comments, it;s confusing. using python` tags will show line numbers
(Aug-25-2020, 02:45 PM)spalisetty06 Wrote: [ -> ]my question is, in line 5, when it is calling factorial(n - 1), isn't it supposed to go to line 1? why is it printing the statement under line 6. Isn't it how it works? If it is coming to line 6, why is it not going to line 7?
How many times should I tell you to run the code on the site I posted twice in order to SEE how the execution goes?