【发布时间】:2014-02-08 10:04:45
【问题描述】:
我有一个字符串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 的所有排列”的问题...这里有一些non-recursive...和FAQ:C# Algorithm that Re-arranges Chars in a String。