【问题标题】:How to return a list from a recursive function for a factorial of a number in python?python - 如何从递归函数返回一个列表以获取python中数字的阶乘?
【发布时间】:2021-10-10 00:57:29
【问题描述】:

对于给定的数字 x ,我想返回一个列表,其中包含在 python 中直到该数字的所有数字的阶乘 示例:如果 n= 5,那么我想返回 [ 1, 2, 6, 24, 120] 如果 n= 5,那么我想返回 [ 1, 2, 6, 24, 120, 720] 我的循环必须在递归函数内。基本上我想要一个递归函数返回一个列表?

【问题讨论】:

  • 你写过递归函数吗?您的代码有什么问题?
  • 或者这是一种作业?
  • #得到一个数的阶乘 def r6(n): for i in range(1,n): if n == 1: return [1] return [ n * r6(n- 1)] x=r6(5) 打印(x)
  • 得到错误不受支持的操作数类型 *: 'int' 和 'NoneType'
  • 这是我写的代码

标签: python


【解决方案1】:

除非有分支逻辑,否则您不会循环使用递归函数。您只需从基本情况开始。在这里,这是阶乘(1)(或者可能为零)。那应该返回一个简单的列表,而无需进行更多递归。然后下一个fact(2) 将调用fact(1) 并附加其新值。然后对于fact(n),它将调用fact(n-1)...

def fact(n):
    if n <= 1:
        return [1]    
    last = fact(n-1)
    return last + [n * last[-1]]

fact(6)
# [1, 2, 6, 24, 120, 720]

【讨论】:

  • 谢谢,上面的代码last[-1]是做什么的?
  • @Ramu last[-1] 是上一次调用返回列表中的最后一个元素。换句话说,它是前一个阶乘。
【解决方案2】:

您可以使用默认参数通过将计数器向下传递到较低的递归级别来缩短函数:

def fact(n,k=2,f=1): return [f] + fact(n-1,k+1,k*f) if n else []

print(fact(5))
[1, 2, 6, 24, 120]

这里,n 仅用作控制递归深度的递减计数器,k 是下一个因子,f 是要添加到结果列表中的当前因子值。

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多