C 将函数转换为使用迭代
我已经编写了一个递归函数来访问数组元素。每隔2、3、4次,依此类推至150次。我想做同样的事情,但是需要迭代。我已经编写了下面的代码,它运行的第一个示例,但我不确定它是否正确,并且工作原理与第一个函数相同。我知道我使用了两个for循环来实现这一点,我可能把指数var放错了位置C 将函数转换为使用迭代,c,for-loop,recursion,iteration,C,For Loop,Recursion,Iteration,我已经编写了一个递归函数来访问数组元素。每隔2、3、4次,依此类推至150次。我想做同样的事情,但是需要迭代。我已经编写了下面的代码,它运行的第一个示例,但我不确定它是否正确,并且工作原理与第一个函数相同。我知道我使用了两个for循环来实现这一点,我可能把指数var放错了位置 void openarray(skip) { int i; for(i = skip; i < 150; i+=skip + 1) { if(arrayB[i] == ope
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);
}
}
void openarray(跳过)
{
int i;
对于(i=跳过;i<150;i+=跳过+1)
{
if(arrayB[i]==打开)
{
arrayB[i]=关闭;
}
其他的
{
arrayB[i]=打开;
}
}
如果(跳过<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;
}
}
inti,j;
对于(i=0;i<150;i++)
{
对于(j=0;j<150;j+=i+1)
if(arrayB[i]==打开)
{
arrayB[i]=关闭;
}
其他的
{
arrayB[i]=打开;
}
}
步骤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);
}
void openarray(跳过)
{
int i;
对于(i=跳过;i<150;i+=跳过+1)
{
if(arrayB[i]==打开)
{
arrayB[i]=关闭;
}
其他的
{
arrayB[i]=打开;
}
}
如果(跳过>=150)
返回;
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;
}
}
void openarray(跳过)
{
而(1){
int i;
对于(i=跳过;i<150;i+=跳过+1)
{
if(arrayB[i]==打开)
{
arrayB[i]=关闭;
}
其他的
{
arrayB[i]=打开;
}
}
如果(跳过>=150)
返回;
跳过=跳过+1;
}
}
第三步:清理
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;
}
}
}
}
void openarray(跳过)
{
用于(;跳过<150;++跳过)
{
int i;
对于(i=跳过;i<150;i+=跳过+1)
{
if(arrayB[i]==打开)
{
arrayB[i]=关闭;
}
其他的
{
arrayB[i]=打开;
}
}
}
}
我们可以将其与您的代码进行比较,以查看您犯了哪些错误:
- 您已将外部循环计数器初始化为零
- 您使用外部循环计数器作为数组索引,而不是内部循环计数器
skip
变量的范围是多少?尝试使用openarray(-1)
并查看。@Meninx-メネンックス, 我看不出有什么问题。参考递归实现和提供的迭代实现对于openarray(-1)
(尽管它显然不是一个有效的输入)的工作原理相同。@ikegami谢谢你,我认为这是可行的!现在的测试似乎和递归方法具有相同的输出