使用递归编写python阶乘函数

时间:2014-09-18 14:56:29

标签: python recursion factorial

我是Python的新手,我正在尝试编写一个Python程序来计算和打印最多n的阶乘!如图所示 使用递归

desired result

但是,我只得到以下结果:

Current result

这是我现在的代码:

def factorial( n ):
    print("n n!")
    if n <=1: 
        print(str(n) + ' ' + str(n))
        return 1
    else:
        r = n * factorial( n - 1 ) 
        print(str(n) + ' ' + str(r))
        return r

我的代码有什么问题?

3 个答案:

答案 0 :(得分:1)

使用递归:

factorial = lambda n: n * factorial(n - 1) if (n > 1) else 1

这类似于你的功能,除了我不打印出来(因为它减慢了它并且是不必要的)。

如果您尝试评估它,例如,使用数字4:

factorial 4
4 * factorial(4 - 1)
4 * (3 * factorial(3 - 1))
4 * (3 * (2 * factorial(2 - 1)))
4 * (3 * (2 * 1)))
24

这样做取数字n,然后检查它是否大于1.如果是,则返回n * n - 1的阶乘。如果它小于或等于1,则返回1.

答案 1 :(得分:0)

好的,我想出了问题所在。我使用Python Interactive Shell来运行程序,因此导致最终结果的双重打印。

我将程序放在.py文件中并使用命令行运行它,我终于得到了正确的结果。

代码最终成为:

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

print("n n!")
factorial(9)

答案 2 :(得分:-1)

没有递归:

def factorial(n):
    answer = 1
    for i in range(2, n+1):
        answer *= i
    return answer

使用递归:

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