如何将for循环变成数学方程?

Posted

技术标签:

【中文标题】如何将for循环变成数学方程?【英文标题】:How to turn for loop into a math equation? 【发布时间】:2016-07-06 18:01:20 【问题描述】:

我的程序中有以下两个循环,我试图将它们写成数学方程式,但我很难找到一种简洁的方法:

// Loop1
for (int i = 0; i < nr; i++) 
    array[i] = nepr;


// Loop2
for (int i = 0; i < (nvr % nr); i++) 
    array[i]++;

代码是完整的函数,但我试图在我正在编写的文档中表达这些循环。

非常感谢任何帮助。

到目前为止,我有这个:

array[i] = nepr, i = 0,...,(nr-1)

但我不确定如何将第二个循环合并到方程中,或者为其编写第二个方程。

【问题讨论】:

【参考方案1】:

只需将其表达为piecewise-defined function:

 f(x) = nepr + 1 if x <  (nvr % xr)  
        nepr     if x >= (nvr % xr)

你也可以用Heaviside step function来定义它:

 f(x) = nepr + H((nxr % xr) - x)

【讨论】:

我相信你的符号没有考虑到 x 是离散值的。你的方程是 x 是连续的。如果我错了,请纠正我。 @Veridian 这不是直接必要的,方程仍然有效。如果要表示x必须是整数,单独声明即可。 @chux 似乎 nvr 总是积极的,但我还是改变了它。 是的,假设nvr, nr 肯定会简化问题。怀疑 OP 是否想要完整的int 解决方案。【参考方案2】:

不完全清楚这就是你要问的,但以下在一个循环中做同样的事情。

for (int i = 0, j = nvr % nr; i < nr; i++) 
    array[i] = nepr + (i < j);


[编辑] 在没有任何循环的随意语言中,以上等同于...

j = nvr % nr。假设正面nrnvr0 &lt;= j &lt; nr 和:

array[i] = nepr + 1i = 0 ... j-1 array[i] = nepri = j ... nr-1

【讨论】:

谢谢,我想我可以这样做:array[i] = nepr + (i 假设需要肯定。代码确实失败了nvr = 7; nr = -3; @chux 对。我编辑了答案以阐明积极性假设。【参考方案3】:

在您的第二个循环中,条件检查有很多 nr-1

如果我理解你的问题,你可以这样表达

array[i] = array[i] + 1 , i = nvr % nr ,...,(nr-2)

【讨论】:

缺少对nvr的依赖 @Veridian 什么样的依赖?最终你会使用nvr % nr 值,对吧?【参考方案4】:

这是在 LaTeX 中。要查看或编辑 LaTeX,请单击方程式。

:= 符号表示赋值。您也可以通过将array_i 替换为array(i)(一个定义在开放整数范围上的函数)以函数方式编写它。

【讨论】:

可能你应该加上 i ∈ N @Logman 似乎与 i 被用作数组的索引这一事实有关 @GuyGreer 但让我们保持正式;)【参考方案5】:

我想我会尝试在@dxiv 的基础上发布完整的int 范围搜索,这在nr, nvr 是肯定的情况下效果很好 - 通常情况下。

假设nr, nvrint

assert(nr != 0);
assert(nr != -1 || nvr >= -INT_MAX);  // avoid -2147483648 % -1
int j = nvr % nr;
int ij = max(i,j);
for (int i = 0; i < ij; i++) 
    array[i] = nepr + (i < j);

【讨论】:

以上是关于如何将for循环变成数学方程?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 for 循环将一段重复的 javascript 打印到 HTML 文档?

简单的for循环实例

C++ For 循环和数组混淆

使用迭代变量名在JavaScript for循环中执行简单数学运算

如何从 JS(ES6)中的 for 循环修复 NaN?

列表未在 for 循环中重置