我是Python的新手,我正在尝试编写一个Python程序来计算和打印最多n的阶乘!如图所示 使用递归 。
但是,我只得到以下结果:
这是我现在的代码:
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
我的代码有什么问题?
答案 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)