最简洁的方法来枚举特定螺旋的过零点

时间:2011-10-27 23:09:58

标签: algorithm abstract pseudocode

从自然界到整数创建以下地图f的最简洁方式(在伪代码中)是什么? f(0)= 0; f(1)= 1; f(2)= -1; f(3)= 2; f(4)= -2; f(5)= 3; 等

你可以将它们想象成双对称阿基米德螺线的零交叉。

哦,不允许浮动数学!浮动数学在这种情况下会很难看。

3 个答案:

答案 0 :(得分:3)

Wolfram Alpha找到了一个直接计算n th 项的封闭形式:

closed form

如果n是正整数,则表达式-1 n 也可以写为(n % 2 == 0 ? 1 : -1)

答案 1 :(得分:1)

不漂亮,但是单线程有效并且不使用条件:

f(i):
  f := (2 * (i mod 2) - 1) * ((i + 1) >> 1)

当然,使用条件,它更具可读性:

f(i):
  if (i mod 2) is
    0: f := -((i + 1) >> 1)
    1: f :=  ((i + 1) >> 1)

答案 2 :(得分:1)

使用C表示法,f(n)将为n % 2 == 0 ? -n/2 : (n+1)/2,即:

如果n是偶数-n/2,如果n是奇数,那么(n+1)/2