首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

问个递归的有关问题

2012-01-22 
问个递归的问题voidadd(){for ( i 20 i++){for (int j 2 j 10 j++){if (i ! j){if (i % j 0

问个递归的问题
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

热点排行