我完全迷失了.我可以迭代地执行此操作,但递归对我来说是新的.如果我给它一个1,2,3的arylylist,那么重复的总可能组合是27.
111,112,113,121,122,123等......
我如何递归地找到它?我会展示我的代码,但我甚至没有接近这个概念......
小智 0
这是我刚刚用 python 编写的硬编码解决方案,但它应该演示原理:
def combinations(original,indexes):
indexes[2] = indexes[2] + 1
if(indexes[2] == 3):
indexes[1] = indexes[1] + 1
indexes[2] = 0
if(indexes[1] == 3):
indexes[0] = indexes[0] + 1
indexes[1] = 0
if(indexes[0] != 3):
print str(original[indexes[0]]) + str(original[indexes[1]]) \
+ str(original[indexes[2]])
combinations(original, indexes)
combinations([1,2,3],[0,0,0])
Run Code Online (Sandbox Code Playgroud)
请注意我如何拥有函数组合()。该函数将原始数组作为参数,并使用第二个数组来跟踪索引。
当我调用函数来启动它时,我将索引数组初始化为全 0。
在堆栈中的每个函数中,您应该增加索引数组中的索引以产生正确的输出。请注意,在我的解决方案中,我如何使用三个 if 语句,这是硬编码部分。这可能可以通过 for 循环来完成。
最后,使用修改后的索引数组再次在其内部调用combinations()函数(递归),直到满足end子句(第一个索引已最大化)。
当我看到您标记为 java 时,此代码片段应作为指南