10

これら 2 つの関数を 1 つの再帰関数に結合して、この結果を得るにはどうすればよいですか。

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

ご覧のとおり、これら 2 つの関数を実行すると正しい答えが得られますが、2 つの関数を単純化して 1 つの再帰関数にしたかっただけです。

4

14 に答える 14

30

2 つの関数をこの 1 つの再帰関数に結合できます。

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
于 2010-12-21T18:13:08.343 に答える
7
def factorial(n):
    result = 1 if n <= 1 else n * factorial(n - 1)
    print '%d! = %d' % (n, result)
    return result
于 2010-12-21T18:12:56.443 に答える
5

短いもの:

def fac(n):
    if n == 0:
        return 1
    else:
        return n * fac(n-1)
print fac(0)
于 2012-12-17T22:29:51.470 に答える
4

私は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
于 2010-12-21T18:11:02.907 に答える
4

これを試して:

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」を返していることです。これは、関数が負の数に対しても 1 を返すことを意味します。あなたはそれを修正したいかもしれません。

于 2010-12-21T18:11:56.190 に答える
3

ひょっとしてこれは宿題ですか?

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 では関数内に関数を定義できるということです。

于 2010-12-21T18:14:05.457 に答える
1

もう1つ

def fact(x):
    if x in {0, 1}:
        return 1
    else:
        return x * fact(x-1)

for x in range(0,10):
    print '%d! = %d' %(x, fact(x))
于 2011-07-21T20:49:36.647 に答える
0

これらの 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)))
于 2018-06-04T21:27:58.717 に答える