2010-12-21 20 views
8

कैसे मैं इस परिणाम के लिए एक पुनरावर्ती क्रिया करने के लिए इन दोनों कार्यों को जोड़ सकते हैं:पुनरावर्ती भाज्य समारोह

factorial(6) 
1! = 1 
2! = 2 
3! = 6 
4! = 24 
5! = 120 
6! = 720 

इन कोड हैं

def factorial(n): 
    if n <1: # base case 
     return 1 
    else: 
     return n * factorial(n - 1) # recursive call 
def fact(n): 
     for i in range(1, n+1): 
       print "%2d! = %d" % (i, factorial(i)) 

fact(6) 
1! = 1 
2! = 2 
3! = 6 
4! = 24 
5! = 120 
6! = 720 

के रूप में आप इन दोनों के निष्पादन को देखने के एक सही जवाब देता है, मैं बस इसे एक पुनरावर्ती समारोह में बनाना चाहता हूं।

+4

मैं एक समारोह में दोनों गठबंधन करने के लिए किसी भी कारण से नहीं मिलता है। – mqpasta

+1

हम्म। क्या यह होमवर्क है? अब तक तुमने क्या प्रयास किये हैं? –

+0

मत करो। यह ठीक तरह से दिखता है। उन्हें जोड़कर चीजों को और अधिक कठिन बना दिया जाएगा। – FrustratedWithFormsDesigner

उत्तर

19
def factorial(n): 
    if n <1: # base case 
     return 1 
    else: 
     returnNumber = n * factorial(n - 1) # recursive call 
     print(str(n) + '! = ' + str(returnNumber)) 
     return returnNumber 
2

मुझे पाइथन के साथ कोई अनुभव नहीं है, लेकिन ऐसा कुछ है?

def factorial(n): 
    if n <1: # base case 
     return 1 
    else: 
     f = n * factorial(n - 1) # recursive call 
     print "%2d! = %d" % (n, f) 
     return f 
+0

मुझे 100% यकीन नहीं है कि यह सही है, लेकिन चूंकि ओपी ने कहा कि यह एक परीक्षा के लिए है, मैं किसी और विवरण में नहीं जाऊंगा ... – FrustratedWithFormsDesigner

2

इस प्रयास करें:

def factorial(n): 
    if n <1: # base case 
     print "%2d! = %d" % (n, n) 
     return 1 
    else: 
     temp = factorial(n - 1) 
     print "%2d! = %d" % (n, n*temp) 
     return n * temp # recursive call 

एक बात मैंने देखा है कि आप n < 1, अपने कार्य भी ऋणात्मक संख्याओं के लिए 1 वापस आ जाएगी मतलब यह है कि के लिए '1' लौट रहे है। आप इसे ठीक करना चाह सकते हैं।

4
def factorial(n): 
    result = 1 if n <= 1 else n * factorial(n - 1) 
    print '%d! = %d' % (n, result) 
    return result 
1

किसी भी संयोग से इस होमवर्क है?

def traced_factorial(n): 
    def factorial(n): 
    if n <= 1: 
     return 1 
    return n * factorial(n - 1) 
    for i in range(1, n + 1): 
    print '%2d! = %d' %(i, factorial(i)) 

PEP227 अधिक जानकारी के लिए एक पठन दें। इसका संक्षेप यह है कि पायथन आपको कार्यों के भीतर कार्यों को परिभाषित करने देता है।

+0

लॉल ... यह एक अच्छा था;) – user531225

+0

@ डी।शॉली: यह काफी अक्षम समाधान है, क्योंकि आप फैक्टोरियल (1) 'एन' टाइम्स, फैक्टोरियल (2) 'एन -1' टाइम्स, फैक्टोरियल (3) 'एन -2' टाइम्स और इतने पर गणना करते हैं ... – Tadeck

1

एक और

def fact(x): 
    if x == 0: 
     return 0 
    elif x == 1: 
     return 1 
    else: 
     return x * fact(x-1) 

for x in range(0,10): 
    print '%d! = %d' %(x, fact(x)) 
+0

गणितीय 0 ! 1 का मूल्यांकन करता है। तो आपके सशर्त के पहले भाग को बदला जाना चाहिए। – mcocdawc

5

एक छोटी एक:

def fac(n): 
    if n == 0: 
     return 1 
    else: 
     return n * fac(n-1) 
print fac(0) 
18

2 कोड की तर्ज:

def fac(n): 
    return 1 if (n < 1) else n * fac(n-1) 

टेस्ट यह:

print fac(4) 

परिणाम:

24 
1
fac = lambda x: 1 if x == 0 else x * fac(x - 1) 
0

आप उपयोगकर्ता से इनपुट प्राप्त करना चाहते हैं तो!

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

n = int(input().strip()) 

print("n! = 1", end="") 

for num in range(2, n+1): 
    print(" x {}". format(num), end="") 


print(" = {}".format(factorial(n))) 
0

मैं वास्तव में ऋणात्मक संख्याओं के भाज्य पता नहीं है, लेकिन यह सब n> = 0 के साथ काम करेंगे:

def factorial(n): 
if n >= 0: 
    if n == 1 or n==0: 
     return 1 
    else: 
     n = n * factorial(n-1) 
     return n 
else: 
    return 'error' 
संबंधित मुद्दे