转换函数以使用迭代

时间:2017-02-22 21:37:25

标签: 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] == 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;
    }
}

1 个答案:

答案 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;
            }
        }
    } 
}

我们可以将此与您的代码进行比较,看看您犯了哪些错误:

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