【发布时间】:2014-10-27 01:27:14
【问题描述】:
这是一个让我很困惑的递归问题。
我想为一系列数字生成所有配对。它们不必全部存储,只需至少生成一次。例如,对于0 1 2 3 4 5,这将是
(0 1) (2 3) (4 5)
(0 1) (2 4) (3 5)
(0 1) (2 5) (3 4)
(0 1) (3 4) (2 5)
(0 1) (3 5) (2 4)
(0 2) (1 3) (4 5)
(0 2) (1 4) (3 5)
etc.
如您所见,我的方法是使用第一个可用数字生成第一对(一开始是 0,使用 0 到 5),遍历所有剩余数字以创建第一对。然后,对于每一对,我用剩余的数字递归。所以如果我的配对是0 1,我会用2 3 4 5重复这个过程。
我的问题是我不知道如何将其实现为递归函数。我发现它必须保留所有解决方案的运行列表(以便可以找到一些东西),同时还必须附加较小的解决方案并将它们组合起来。这对我来说太复杂了,无法想象,因此对于方法或伪代码(尽可能简单)的任何帮助将不胜感激。
【问题讨论】:
-
我不确定递归函数是否是生成对的正确工具。如果您不仅要生成对,还要生成
(0 2 4 5)和(1 3 4)等。您可以使用接受两个参数的递归函数:当前排列和剩余数字列表。 -
您的规则不明确。首先,显然
(0 1) (2 3) (4 5)有效,但(0 1) (2 3) (5 4)无效;正确的?此外,(0 1) (2 3) (4 5)与(0 1) (4 5) (2 3)不同;正确的?究竟是什么决定了有效配对? -
@user2338816 前两个其实是一样的。我弄错了,你说的最后两个也是一样的。
标签: recursion pseudocode