gpt4 book ai didi

将函数转换为使用迭代

转载 作者:行者123 更新时间:2023-11-30 19:35:38 27 4
gpt4 key购买 nike

我编写了一个递归函数来访问数组元素。每第 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 步:让我们将递归调用放在最后。

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

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

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

关于将函数转换为使用迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com