Java 如何动态决定需要多少个循环?

Java 如何动态决定需要多少个循环?,java,for-loop,Java,For Loop,以下是主题: 我有一个链接列表,如果列表有3个元素,我想为它列出一个完整的真值表,例如: a b c <--- the three elements in list 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 1 1 0 1 0 1 0 1 1 abc循环的数量需要与元素的数量相匹配。有两种方法可以解决这个问题 使用递归,这样就有一个循环,并且该方法为下一级循环调用自己 使用一个循环,重复2^n次并提取出组件值 如果您只想要一个真值表,那么简单的解决方案是: 代

以下是主题:

我有一个
链接列表
,如果列表有3个元素,我想为它列出一个完整的真值表,例如:

a b c   <---   the three elements in list
0 0 0
0 0 1
0 1 0
1 0 0
1 1 1
1 1 0
1 0 1
0 1 1

abc循环的数量需要与元素的数量相匹配。有两种方法可以解决这个问题

  • 使用递归,这样就有一个循环,并且该方法为下一级循环调用自己
  • 使用一个循环,重复2^n次并提取出组件值

如果您只想要一个真值表,那么简单的解决方案是:

代码:

int len=3;
int num=(int)Math.pow(2,len);

对于(int i=0;i我不会用Java为您编写它,但下面是一个伪代码,让您了解如何递归地解决问题:

l = ['a','b','c']

def f(l, result):
    if len(l) == 0:
        print result
        return
    first = l[0]
    rest = l[1:]
    f(rest, result + [(first,0)])
    f(rest, result + [(first,1)])

f (l, [])
这应该打印如下内容:

[('a', 0), ('b', 0), ('c', 0)]
[('a', 0), ('b', 0), ('c', 1)]
[('a', 0), ('b', 1), ('c', 0)]
[('a', 0), ('b', 1), ('c', 1)]
[('a', 1), ('b', 0), ('c', 0)]
[('a', 1), ('b', 0), ('c', 1)]
[('a', 1), ('b', 1), ('c', 0)]
[('a', 1), ('b', 1), ('c', 1)]

听起来递归可能很有用。以前读过一些,为什么要问?@ZagorulkinDmitrySo你发布了一个未经测试的非java解决方案。你为什么首先发布这个?你应该发布至少一个更像java的伪代码。(java中没有切片)嗯,shengy似乎很难找到一个算法来解决这个问题,所以我提出了一个算法,将Java实现留给他,因为我认为这对他的教育更有益。你说“这应该打印出来”。这就像“我不确定”。你如何测试伪代码?无论如何,我不想在这里争论。:-)谢谢你的基本逻辑提示!
l = ['a','b','c']

def f(l, result):
    if len(l) == 0:
        print result
        return
    first = l[0]
    rest = l[1:]
    f(rest, result + [(first,0)])
    f(rest, result + [(first,1)])

f (l, [])
[('a', 0), ('b', 0), ('c', 0)]
[('a', 0), ('b', 0), ('c', 1)]
[('a', 0), ('b', 1), ('c', 0)]
[('a', 0), ('b', 1), ('c', 1)]
[('a', 1), ('b', 0), ('c', 0)]
[('a', 1), ('b', 0), ('c', 1)]
[('a', 1), ('b', 1), ('c', 0)]
[('a', 1), ('b', 1), ('c', 1)]