问个递归的问题
void add()
{
for (; i < 20; i++)
{
for (int j = 2; j < 10; j++)
{
if (i != j)
{
if (i % j == 0)
{
i++;
if (i < 20)
{
add();
}
}
}
}
textBox1.Text += i+",";
}
}
我想得到20以内的素数。但结果却是 2,3,5,7,11,13,17,19,22,23,26,29,31,33,34,37,38,41,
请问一下“19”以后的数是怎么出来的?
------解决方案-------------------- {
for (; i < 20; i++)
{
for (int j = 2; j < 10; j++)
{
if (i != j)
{
if (i % j == 0)
{
i++;
if (i < 20)
{
add();
}
}
}
}
textBox1.Text += i+",";
}
}
注意你的第二个循环,里面有个i++,当i=19的时候,你这个循环里面还会不停的i%j,不为0还是会加1的,一直到把i=19的情况都判断完毕。所以第一个循环外面你加个判断就好了
C# code
void add()
{
for (; i < 20; i++)
{
for (int j = 2; j < 10; j++)
{
if (i != j)
{
if (i % j == 0)
{
i++;
if (i < 20)
{
add();
}
}
}
}
if (i > 20)
{
break;
}
textBox1.Text += i + ",";
}
}
------解决方案--------------------
在方法外声明了 int i=2,这是造成问题的原因所在。相当于C++中i是一个全局变量。
在i<20前,已经满足了若干次的条件,在第二个循环里,足以让i>20