特定のスパイラルのゼロ交差を列挙する最も簡潔な方法

ナチュラルから整数への次のマップfを作成する最も簡潔な方法(擬似コード) f(0)= 0; f(1)= 1; f(2)= -1; f(3)= 2; f(4)= -2; f(5)= 3; 等

それらを二重対称アルキメデスらせんのゼロ交差として想像することができます。

ああ、フロート数学は許されていない!フロートの数学は...この状況では醜いでしょう。

1

3 答え

Wolfram Alpha found a closed form for calculating the nth term directly:

closed form

nが正の整数の場合、式-1 n(n%2 == 0?1:-1)として記述することもできます。

3
追加された

C記法では、 f(n)n%2 == 0になりますか? -n/2:(n + 1)/ 2 、すなわち

If n is even then -n/2, if n is odd then (n+1)/2

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)
1
追加された