功能多次打印

时间:2016-06-12 03:12:05

标签: python function recursion

我编写了一个函数,它将正整数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)

4 个答案:

答案 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)所以列表将被打印。 (实际上这意味着每次调用函数都会打印出来的东西)