创建这一系列数字最优雅的方法是什么?

时间:2012-12-13 21:23:34

标签: math collections language-agnostic series code-formatting

我在一个集合中有N个项目,我从1开始分配值,在列表的“中心”下降到0,然后线性地返回到1。

所以如果你有5个项目:

0   1   2   3   4
1   0.5 0   0.5 1

对于6个项目,中心的2个项目具有相同的值0。

0   1   2   3   4   5
1   0.5 0   0   0.5 1

现在我有一堆if语句检查index,然后决定该值是从1上升还是下降。但它看起来太乱了。

是否有一种优雅的方式来创建这样一系列数字(如果可能的话,特别是没有if语句)?

1 个答案:

答案 0 :(得分:5)

如果N >= 3是奇数,那么

f(x) = fabs(2*x-N+1)/(N-1)

如果N >= 4是偶数,那么

f(x) = (fabs(2*x-N+1) - 1)/(N-2)

要完全摆脱if语句,可以将其写为

f(x) = (fabs(2*x-N+1) + (N%2) - 1)/(N-2 + (N%2))

适用于N >= 3的偶数和奇数值。