【发布时间】:2014-04-20 18:09:15
【问题描述】:
我正在研究递归查找 3 位数字的所有排列。
我已经厌倦了以下排列方法:
static int a = 1;
static int b = 2;
static int c = 3;
static int aCount;
static int bCount;
static int cCount;
static void perm(int a, int b, int c)
{
Console.WriteLine("( {0}, {1}, {2} )", a, b, c); // (1,2,3 )
if (aCount < 1 && bCount<1 &&cCount<1)
{
aCount++;
perm(a, c, b);
}
else
if (aCount==1 && bCount < 1 && cCount<1)
{
bCount++;
perm(b, a, c);
}
else
if (aCount == 1 && bCount == 1 && cCount < 1)
{
perm(b,c,a);
}
else
if (aCount==1 && bCount==1 && cCount < 1)
{
cCount++;
perm(c, a, b); //c b a
}
else
if (aCount == 1 && bCount == 1 && cCount == 1)
{
perm(c, b, a);
}
}
我试图涵盖所有案例,每个步骤都有详细信息,但我仍然突然收到堆栈溢出异常。
感谢您的贡献,感谢转发。
【问题讨论】:
-
请在开始前将aCount、bCount和cCount初始化为0。
-
哦,抱歉,我一定是在实验时错过了这个:P
标签: c# algorithm recursion backtracking recursive-backtracking