所以我有这个数组:
string[] words = {'test', 'rock', 'fun'}
我必须打印所有子集,所以结果必须是
(), (test), (rock), (fun), (test rock), (test fun),(rock fun), (test rock fun)
到目前为止,这是我的代码
static int x = 0;
static void Main(string[] args)
{
string[] words = { "test", "rock", "fun" };
string[] helperArray = new string[3];
NestedLoops(words, helperArray, 0, 0);
}
static void NestedLoops(string[] words, string[] helperArray, int index, int start)
{
if (index == x)
{
PrintArray(helperArray);
}
else
{
for (int i = start; i < 3; i++)
{
helperArray[index] = words[i];
NestedLoops(words, helperArray, index + 1, i + 1);
}
}
}
static void PrintArray(string[] array)
{
Console.Write("(");
for (int i = 0; i < 3; i++)
{
Console.Write(" {0}", array[i]);
}
Console.Write(")");
Console.WriteLine();
}
我只是不知道如何在循环结束时使 x 增加,现在我只得到这些结果
x = 0 - ()
x = 1 - (测试), (摇滚), (乐趣)
x = 2 - (测试摇滚), (测试乐趣),(摇滚乐趣)
ETC..
我是递归新手,所以如果问题很愚蠢,我很抱歉。
编辑:
我把它弄出来了,尽管它不是很优雅。
在 main 方法中添加了循环
static void Main(string[] args)
{
string[] words = { "test", "rock", "fun" };
string[] helperArray = new string[3];
for (int i = 0; i <= 3; i++)
{
NestedLoops(words, helperArray, 0, 0, i);
}
}
并将变量 x 添加到嵌套循环递归中
static void NestedLoops(string[] words, string[] helperArray, int index, int start, int x)
{
if (index == x)
{
PrintArray(helperArray);
}