代码如下:
我要取得0到9 的可重复组合,利用下面的递归方法,可是当长度去4时就没有响应了,请问有什么其他好办法! private static int si = 1;
private static int rsi = 1;
private static int icount = 1;
private static int[] iarr; private void btnStart_Click(object sender, System.EventArgs e)
{
if(this.txtStr.Text == "这里输入前缀")
{
MessageBox.Show("请输入前缀!","提示",System.Windows.Forms.MessageBoxButtons.YesNo );
}
else
{
si = int.Parse(cmbxSelect.Text);
rsi = si;
icount = 1;
}
char[] cDri = new char[si];
iarr = new int[rsi];
for(int i =0;i < iarr.Length;++i)iarr[i] = 0;
string strin = this.txtStr.Text;
Dirct(ref si,ref strin,txtOut,ref cDri);
}
public void Dirct(ref int si,ref string str, TextBox txtOut,ref char[] carr)
{
if ( 0 == si)
{
string strOut = "" ;
for (int i = 0; i < carr.Length; i++)
{
strOut += carr[i];
}
txtOut.Text += str +strOut+ "\r\n";
return ;
}
si -= 1; for (int i = 0; i <10; i++)
{
carr[rsi - si - icount] = (char)(48 + i);
++iarr[rsi - si - icount ];
if((rsi - si - icount) != (carr.Length - 1))
{
if(iarr[rsi - si - icount] != 10 && iarr[rsi - si -icount ] != 1 )
{
icount--;
si = 1;
}
}
Dirct(ref si,ref str,txtOut,ref carr);
}
++icount; return;
}
我要取得0到9 的可重复组合,利用下面的递归方法,可是当长度去4时就没有响应了,请问有什么其他好办法! private static int si = 1;
private static int rsi = 1;
private static int icount = 1;
private static int[] iarr; private void btnStart_Click(object sender, System.EventArgs e)
{
if(this.txtStr.Text == "这里输入前缀")
{
MessageBox.Show("请输入前缀!","提示",System.Windows.Forms.MessageBoxButtons.YesNo );
}
else
{
si = int.Parse(cmbxSelect.Text);
rsi = si;
icount = 1;
}
char[] cDri = new char[si];
iarr = new int[rsi];
for(int i =0;i < iarr.Length;++i)iarr[i] = 0;
string strin = this.txtStr.Text;
Dirct(ref si,ref strin,txtOut,ref cDri);
}
public void Dirct(ref int si,ref string str, TextBox txtOut,ref char[] carr)
{
if ( 0 == si)
{
string strOut = "" ;
for (int i = 0; i < carr.Length; i++)
{
strOut += carr[i];
}
txtOut.Text += str +strOut+ "\r\n";
return ;
}
si -= 1; for (int i = 0; i <10; i++)
{
carr[rsi - si - icount] = (char)(48 + i);
++iarr[rsi - si - icount ];
if((rsi - si - icount) != (carr.Length - 1))
{
if(iarr[rsi - si - icount] != 10 && iarr[rsi - si -icount ] != 1 )
{
icount--;
si = 1;
}
}
Dirct(ref si,ref str,txtOut,ref carr);
}
++icount; return;
}
如果算法正确的话,出现上面的问题在于递归调用,为什么直接用函数写呢,并不是很复杂。