递归因子函数

时间:2010-12-21 18:06:20

标签: python recursion factorial

如何将这两个函数组合到一个递归函数中以获得此结果:

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

正如你看到这两个的执行给出了正确的答案,我只想把它变成一个递归函数。

14 个答案:

答案 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))