我编写了一个递归函数来访问数组元素。每隔2,3,4等等到150.我想做同样的事情,但迭代。我在下面编写了一些代码,它运行的第一个例子,但我不确定它是否正确,并且与第一个函数的工作方式相同。我知道我正在使用两个for循环来执行此操作我可能已将索引var置于错误的位置。
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 :(得分: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;
}
}
}
}
我们可以将此与您的代码进行比较,看看您犯了哪些错误: