【发布时间】:2014-03-31 06:14:19
【问题描述】:
我正在编写一个程序,目标是获取一个数字列表并使用递归函数返回所有六个字母的组合(无需导入函数来为我执行此操作)。比如说,我的数字是“1 2 3 4 5 6 7 8 9”,输出将是:
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
1 2 3 4 5 9
1 2 3 4 6 7
1 2 3 4 6 8
1 2 3 4 6 9
1 2 3 4 7 8
... etcetera, all the way down to
4 5 6 7 8 9
我不是在寻找代码,而是在概念上朝着正确的方向推进。到目前为止我所做的尝试都失败了,我已经把自己逼入了一个合乎逻辑的轨道。
我在下面包含了我之前使用的代码,但它并不是真正的递归函数,似乎只适用于 6-8 位值。它非常混乱,我可以完全废弃它:
# Function prints all the possible 6-number combinations for a group of numbers
def lotto(constantnumbers, variablenumbers):
# Base case: No more constant variables, or only 6 numbers to begin with
if len(constantnumbers) == 0 or len(variablenumbers) == 0:
if len(constantnumbers) == 0:
print(" ".join(variablenumbers[1:7]))
else:
print(" ".join(constantnumbers[0:6]))
i = 6 - len(constantnumbers)
outvars = variablenumbers[1:i + 1]
if len(variablenumbers) > len(outvars) + 1:
print(" ".join(constantnumbers + outvars))
for index in range(len(outvars), 0, -1):
outvars[index - 1] = variablenumbers[index + 1]
print(" ".join(constantnumbers + outvars))
else:
i = 6 - len(constantnumbers)
outvars = variablenumbers[1:i + 1]
print(" ".join(constantnumbers + outvars))
if len(variablenumbers) > len(outvars) + 1:
for index in range(len(outvars), 0, -1):
outvars[index - 1] = variablenumbers[index + 1]
print(" ".join(constantnumbers + outvars))
#Reiterates the function until there are no more constant numbers
lotto(constantnumbers[0:-1], constantnumbers[-1:] + variablenumbers)
【问题讨论】:
-
为什么使用字符串而不是整数?
-
在问题的上下文中,这并不重要。从理论上讲,它也应该能够处理字母表中的字母。
-
嗯,不,不是说。我只是不认为这会产生可读的代码。您可以通过在开头将数字转换为整数来使该函数对作为字符串输入的数字起作用。
-
不管怎样,我更关心的是递归函数本身的结构以及我应该如何实现它。如果整数会使它更具可读性,那么一旦我真正知道我在做什么,我肯定会用它们来实现它。我仍然对函数应该如何工作感到迷茫。
标签: python list python-3.x recursion permutation