如何将这两个函数组合到一个递归函数中以获得此结果:
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
正如你看到这两个的执行给出了正确的答案,我只想把它变成一个递归函数。
答案 0 :(得分:25)
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
答案 1 :(得分:23)
2行代码:
def fac(n):
return 1 if (n < 1) else n * fac(n-1)
测试它:
print fac(4)
结果:
24
答案 2 :(得分:6)
一个简短的:
def fac(n):
if n == 0:
return 1
else:
return n * fac(n-1)
print fac(0)
答案 3 :(得分:5)
def factorial(n):
result = 1 if n <= 1 else n * factorial(n - 1)
print '%d! = %d' % (n, result)
return result
答案 4 :(得分:3)
我没有使用过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
答案 5 :(得分:3)
试试这个:
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&lt; 1返回'1',这意味着即使是负数,你的函数也会返回1。你可能想解决这个问题。
答案 6 :(得分:3)
fac = lambda x: 1 if x == 0 else x * fac(x - 1)
答案 7 :(得分:2)
这是否有任何机会做作业?
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允许您在函数中定义函数。
答案 8 :(得分:2)
再一次
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))
答案 9 :(得分:1)
我真的不知道负数的阶乘,但这适用于所有n&gt; = 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'
答案 10 :(得分:1)
可以使用这4行代码......
def factorial(n):
f = lambda n: n * f(n - 1) if n > 1 else 1
for x in range(n):
print('{}! = {}'.format(x + 1, factorial(x + 1)))
答案 11 :(得分:1)
并且第一次使用递归和while循环计算阶乘。
def factorial(n):
while n >= 1:
return n * factorial(n - 1)
return 1
尽管TrebledJ在有关使用if
的注释中写的选项更好。因为while
循环执行的操作(SETUP_LOOP, POP_BLOCK
)比if
多。功能较慢。
def factorial(n):
if n >= 1:
return n * factorial(n - 1)
return 1
timeit -n 10000 -r 10
while
每个回路836 µs±11.8 µs if
每个循环787 µs±7.22 µs 答案 12 :(得分:0)
递归函数中总是存在某种循环,还有一些停止循环的停止代码:
public int recursivefactorial(int number)
{
if(number==1)
return 1;
else
return recursivefactorial(number-1)*number;
}
如您所见,满足if
条件导致代码实际上结束了“循环”,这是递归函数的最重要部分。相反,条件的else
部分导致再次调用recursivefactorial
函数,这实际上是一种循环。
答案 13 :(得分:-1)
再多一次=)
#FAC calculation
def fakulteta(x):
if x!=1:
return x*fakulteta(x-1)
return 1
print (fakulteta(12))