2017-02-22 50 views
-1

我写了一个递归函数来访问数组元素。每个第二,第三,第四,等等到150.我想要做同样的事情,但迭代。我在下面编码了一些东西,它运行的第一个例子,但我不确定它是否正确,并且与第一个函数的作用相同。我知道我使用两个for循环来做到这一点,我可能已经把索引变量放在错误的地方。转换函数使用迭代

void openarray(skip) 
{ 
    int i; 
    for(i = skip; i < 150; i+=skip + 1) 
    { 
     if(arrayB[i] == open) 
     { 
      arrayB[i] = close; 
     } 
     else 
     { 
      arrayB[i] = open; 
     } 
    } 
    if(skip < 150) 
    { 
     openarray(skip + 1); 
    } 
} 

我的代码变成迭代我想我可能已经混淆了索引的步骤,反之亦然。

int i, j; 
for(i = 0; i < 150; i++) 
{ 
    for (j = 0; j < 150; j+=i + 1) 
    if(arrayB[i] == open) 
    { 
     arrayB[i] = close; 
    } 
    else 
    { 
     arrayB[i] = open; 
    } 
} 
+0

“我不确定它的正确性和作用与第一个功能相同”。这就是测试的目的。设计你的测试并运行它们。如果结果是错误的,那么你知道代码是不正确的。从那里开始调试。在Stackoverflow上发布不是测试或调试的第一步。 – kaylum

+1

@kaylum ive试过所有的日子ive一直打印出所有的索引,并跳过我不能想出它,你不认为我一直在测试和尝试一个粗鲁的假设... – mikecodeguy

+2

10那么你为什么不这样说呢?分享您的测试结果 - 输入,预期输出,实际输出。这和所有问题都应该帮助读者了解你的具体问题。 – kaylum

回答

0

第1步:让我们把递归调用放在最后。

void openarray(skip) 
{ 
    int i; 
    for(i = skip; i < 150; i+=skip + 1) 
    { 
     if(arrayB[i] == open) 
     { 
      arrayB[i] = close; 
     } 
     else 
     { 
      arrayB[i] = open; 
     } 
    } 

    if(skip >= 150) 
     return; 

    openarray(skip + 1); 
} 

第2步:添加循环。

void openarray(skip) 
{ 
    while (1) { 
     int i; 
     for(i = skip; i < 150; i+=skip + 1) 
     { 
      if(arrayB[i] == open) 
      { 
       arrayB[i] = close; 
      } 
      else 
      { 
       arrayB[i] = open; 
      } 
     } 

     if(skip >= 150) 
      return; 

     skip = skip + 1; 
    } 
} 

第3步:清理

void openarray(skip) 
{ 
    for (; skip < 150; ++skip) 
    { 
     int i; 
     for(i = skip; i < 150; i+=skip + 1) 
     { 
      if(arrayB[i] == open) 
      { 
       arrayB[i] = close; 
      } 
      else 
      { 
       arrayB[i] = open; 
      } 
     } 
    } 
} 

我们可以比较这对你的代码,看看你做了什么错误:

  • 您初始化外环计数器为零。
  • 您使用外循环计数器作为数组索引而不是内循环计数器。
+0

您正在根据**不清楚和不完整的问题作出答复**。 'skip'变量的范围是什么?用'openarray(-1)'尝试看看。 –

+0

@Meninx - メネンックス,我没有看到问题。对于'openarray(-1)',引用递归实现和提供的迭代实现都是一样的(尽管它显然不是有效的输入)。 – ikegami

+0

@ikegami谢谢你,我认为这有效!现在测试似乎具有与递归方法相同的输出 – mikecodeguy