我有一个字符串ABC
,我试图用递归获取它的所有形式。例如,我的目标是使输出看起来就像这样:递归获取字符串的形式
A
B
C
AB
AC
BC
目前,我遇到一个问题,我似乎无法弄清楚它为什么这样做。当我遍历我的代码并到达return temp
时,它会回到Passwords(word.Substring(start + 1, end - 1), start + 1, end);
,即使该功能已经完成。当它这样做时,它将删除包含在我的列表中的任何元素。
class Program
{
static void Main(string[] args)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\words.txt";
string text = "abc";
List<string> passwords = Passwords(text, 0, text.Length);
foreach (string password in passwords)
{
using (StreamWriter writer = new StreamWriter(path))
{
Console.WriteLine(password);
writer.WriteLine(password);
}
}
}
public static List<string> Passwords(string word, int start, int end)
{
List<string> temp = new List<string>();
if (start == end)
{
temp.Add(word);
}
else if (word.Length == 2)
{
char[] input = word.ToCharArray();
string letter1 = input[0].ToString();
string letter2 = input[1].ToString();
string s = letter2 + letter1;
temp.Add(s);
}
else
{
if (start < end)
{
Passwords(word.Substring(start + 1, end - 1), start + 1, end);
}
}
return temp;
}
}
任何人都可以帮助指出我在正确的方向,我做错了什么?
应该有不少“如何生成XXXXX的所有排列”的问题......这里有一些[非递归(http://stackoverflow.com/questions/11208446/generating-permutations-of- a-set-most-efficient)...和[FAQ:重新排列字符串中的字符的C#算法](http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of -k元素-从-N)。 –