2010-12-21 127 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 2010-12-21 18:08:29

+1

嗯。這是功課嗎?你試過什麼了? – 2010-12-21 18:08:44

+0

不要。它看起來很好。把它們結合起來會讓事情變得更加困難。 – FrustratedWithFormsDesigner 2010-12-21 18:08:48

回答

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

我對Python沒有經驗,但是像這樣?

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 
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 

一件事我注意到的是,你正在返回「1」當n < 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瞭解更多詳情。簡而言之,Python允許您在函數內定義函數。

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)) 
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'