【发布时间】:2016-10-09 21:09:12
【问题描述】:
我无法解决此任务:
编写一个递归函数,输入一个正整数 n 和 输出所有 n! {1, 2, . . . , n}。不要使用任何 Sage 的排列命令。使用列表来存储值和工作 用那个列表。
示例输入:3
预期输出:(1,2,3), (1,3,2), (2,3,1),(2,1,3), (3,1,2), (3,2,1)
我在网上找到的所有东西都会生成列表的排列而不是整数。
我想计算我的阶乘将有助于确定我的输出长度。我不知道该怎么做。请帮帮我!谢谢 !
我试过了
def per(n):
a = []
for i in range(n):
for j in range(n-i):
a.append((i, j, n-i-j-1))
return a
per(3)
[(0, 0, 2), (0, 1, 1), (0, 2, 0), (1, 0, 1), (1, 1, 0), (2, 0, 0 )]
【问题讨论】:
-
这个函数不是递归的...
-
你能帮帮我吗!我已经尝试了很长时间,但我无法得到它!谢谢!
-
您真正需要的是返回
list(range(1, n + 1))的组合。这可以通过itertools.permutations(range(1, n + 1), n)完成。因此,您可以查看the docs,了解该算法的可能实现方式。 -
看看this 的帖子。问题似乎与您的问题相同,并且响应很好地解释了算法(尽管它是在 Java 中)。在您的情况下,
n和k应该具有相同的值。 -
不知道为什么这被如此严重地否决了,这对初学者来说并不是微不足道的,尤其是当像stackoverflow.com/questions/39948902/… 这样的问题在没有一行代码的情况下被赞成时。