Oas*_*asa 5 java algorithm loops nested dynamic
我对编程比较陌生。正如标题所暗示的那样,我需要一种算法来让我获得与可变嵌套循环相同的功能。IE
for(..)
{ for(..){
for(..){....}
.
.
}}
Run Code Online (Sandbox Code Playgroud)
嵌套循环数将根据用户输入而变化。我想要实现的是找到数字的所有组合 (10,9,8,7,6,5,4) 现在我已经阅读了很多。要么我不完全理解它们(我是编程世界的新手)要么它不符合我的目的。我稍后在某些计算中需要这些组合,而不仅仅是打印所有组合。据我所知,一种方法是使用递归。我不完全理解。我试图做一个递归函数,但失败了。这就是我要的
10 10 10
10 10 9
10 10 8
.
.
.
4 4 4
Run Code Online (Sandbox Code Playgroud)
数字可以改变(比如 10 10 10 10 , 10 10 10 9 .. )这些组合将存储在一个数组中,因为我以后需要它们进行操作。请保持简单并发表评论。
首选语言是java。任何语言都可以。强烈推荐通用算法。PS 这不是作业。
感谢阿米特。这是工作代码
def findcombinations(array,n,sol,tt=[]):
if (n== 0):
tt.append(sol[:])
return
for x in array:
sol.append(x)
findcombinations(array,n-1,sol,tt)
del sol[-1]
return tt
Run Code Online (Sandbox Code Playgroud)
调用函数使用
print(findcombinations([1,2],3,[]))
通常当您需要“动态循环”时 - 这强烈表明您实际上需要递归。
例如,查找n数组中数字大小的所有可能组合[伪代码]:
findCombinations(array,n,sol):
if (sol.size == n): //stop condition for the recursion
print sol
return
for each x in array:
sol.append(x)
findCombinations(array,n-1,sol) //recursive call
sol.removeLast() //cleaning up environment
Run Code Online (Sandbox Code Playgroud)
上面的伪代码将查找并打印由[每个元素可以出现多次]n中的元素组成的所有长度序列array