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

Joa*_*nge 1 language-agnostic math collections code-formatting series

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

所以如果你有5件物品:

0   1   2   3   4
1   0.5 0   0.5 1
Run Code Online (Sandbox Code Playgroud)

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

0   1   2   3   4   5
1   0.5 0   0   0.5 1
Run Code Online (Sandbox Code Playgroud)

现在我有一堆if语句检查index,然后决定该值是否应该从1上升或下降.但它似乎太乱了.

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

Mar*_*n R 5

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

f(x) = fabs(2*x-N+1)/(N-1)
Run Code Online (Sandbox Code Playgroud)

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

f(x) = (fabs(2*x-N+1) - 1)/(N-2)
Run Code Online (Sandbox Code Playgroud)

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

f(x) = (fabs(2*x-N+1) + (N%2) - 1)/(N-2 + (N%2))
Run Code Online (Sandbox Code Playgroud)

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