gpt4 book ai didi

c - 构建一个数组,其中每个元素都依赖于前一个

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:18 25 4
gpt4 key购买 nike

我正在构建一组数组,其中每个元素都依赖于前一个元素,而且我很难想出一个优雅的解决方案来设置初始值。代码看起来像这样:

int A[1024];
int B[1024];
/* ... more arrays... */
int i;
for (i = 0; i < 1024; i++) {
/* do some work */
A[i] = A[i-1] + some_value();
B[i] = B[i-1] + some_other_value();
/* ... and so on... */
}

当然,当i为0时,这是一个无效的内存访问。我知道所有数组的初始值都应该是0。

有几种方法可以解决这个问题。我可以在循环中放置一个巨大的 if 语句来检查 i 是否为 0。看起来很笨重,因为它只会求值为 true 一次。我可以为每个数组保留一个初始化为 0 的临时变量,称为 prev_val_of_A 等,它保存最后一次迭代的值。我必须在每次迭代结束时将其更新为当前值。这看起来有点傻,因为大多数时候,我想要的值就在数组的前一个元素中。我可以摆弄数组的含义,并采用数组中的 second 元素包含循环的 first 迭代的值的约定;即为A[1025]分配内存,初始化A[0],然后在循环中执行

A[i+1] = A[i] + some_value();

这看起来令人困惑,并且可能会在进一步使用 A 时引发错误。

我正在寻找干净、优雅的建议来解决这个问题。

最佳答案

解决这个问题最简单的方法是初始化A[0] , B[0]等然后从i = 1开始循环.即

int A[1024];
int B[1024];
/* ... more arrays... */
int i;

A[0] = stuff();
B[0] = other_stuff();
/* etc */

for (i = 1; i < 1024; i++) {
/* do some work */
A[i] = A[i-1] + some_value();
B[i] = B[i-1] + some_other_value();
/* ... and so on... */
}

编辑:这相当优雅,因为它反射(reflect)了数学:序列通常由 f(0) = x 定义。 , f(n) = <stuff with f(n-1)>如果 n > 0)

关于c - 构建一个数组,其中每个元素都依赖于前一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012339/

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