我编写了一个函数,它将正整数n作为输入,并递归返回一个因子值列表1!,2!,. 。 。 ,n!。
但是,我无法让它一次打印清单。我已经尝试将print语句放在各种循环/位置,它总是打印至少3次。我也试过打印函数,但它返回'None',如果我在函数中有print语句,它似乎只打印。为什么是这样?
这是我的代码:
def calc_Factorial(my_list, n, x, e):
if not my_list:
my_list.append(n-(n-1))
calc_Factorial(my_list, n, x, e)
else:
if len(my_list) < n:
my_list.append(my_list[e]*x)
calc_Factorial(my_list, n, x+1, e+1)
if len(my_list) == n:
print(my_list)
e = 0
x = 2
n = int(input('Enter number: '))
my_list = []
calc_Factorial(my_list, n, x, e)
答案 0 :(得分:1)
将打印语句更改为return my_list
:
def calc_Factorial(my_list, n, x, e):
if not my_list:
my_list.append(n-(n-1))
calc_Factorial(my_list, n, x, e)
else:
if len(my_list) < n:
my_list.append(my_list[e]*x)
calc_Factorial(my_list, n, x+1, e+1)
if len(my_list) == n:
return my_list
>>> calc_Factorial(my_list, n, x, e)
[1, 2, 6, 24, 120, 720, 5040]
>>>
答案 1 :(得分:1)
def calc_Factorial(my_list, n, x, e):
if not my_list:
my_list.append(n-(n-1))
return calc_Factorial(my_list, n, x, e)
else:
if len(my_list) < n:
my_list.append(my_list[e]*x)
return calc_Factorial(my_list, n, x+1, e+1)
if len(my_list) == n:
print(my_list)
return my_list
您的关键问题,每次拨打return calc_Factorial(my_list, n, x+1, e+1)
时都应recursive
。如果您没有return
递归,则最终将执行其余代码。这就是你看到多个print
。
只要在这种情况下使用return调用递归。您应始终只看一次打印(即使您没有return my_list
:
if len(my_list) == n:
print(my_list)
但通常在递归函数中,人们最终会返回您想要的值。但是,您可以使用打印服务进行调试。
答案 2 :(得分:1)
由于您在递归函数中使用print
,因此会多次打印该值。您应该返回而不是在递归函数内打印。
def calc_Factorial(my_list, n, x, e):
if not my_list:
my_list.append(n-(n-1))
return calc_Factorial(my_list, n, x, e)
else:
if len(my_list) < n:
my_list.append(my_list[e]*x)
return calc_Factorial(my_list, n, x+1, e+1)
if len(my_list) == n:
return (my_list)
e = 0
x = 2
n = int(input("Enter number: "))
my_list = []
print (calc_Factorial(my_list, n, x, e))
答案 3 :(得分:0)
你所看到的是因为这部分:
if len(my_list) < n:
my_list.append(my_list[e]*x)
calc_Factorial(my_list, n, x+1, e+1)
if len(my_list) == n:
print(my_list)
在第一个if语句之后,该函数将继续执行,现在 n == len(my_list)所以列表将被打印。 (实际上这意味着每次调用函数都会打印出来的东西)