如何迭代系列:1,-2,3,-4,5,-6,7,-8.

How to iterate over the series: 1, -2, 3, -4, 5, -6, 7, -8, ...?

本文关键字:何迭代 迭代 系列      更新时间:2023-09-26

您将如何在Javascript/jQuery中迭代以下系列:

1, -2, 3, -4, 5, -6, 7, -8, ...

以下是我的操作方法:

n = 1
while (...) {
  n = ((n % 2 == 0) ? 1 : -1) * (Math.abs(n) + 1);
}

有没有更简单的方法?

您可以保留两个变量:

for (var n = 1, s = 1; ...; ++n, s = -s)
  alert(n * s);

这是更简单的

x = 1;
while (...) {
    use(x);
    x = - x - x / Math.abs(x);
}

x = 1;
while (...) {
    use(x);
    x = - (x + (x > 0)*2 - 1);
}

或者更简单的(如果你不需要真正"增加"变量,只需要使用值)

for (x=1; x<n; x++)
    use((x & 1) ? x : -x);

这看起来差不多是对的,并不比这简单多少。尽管如果您从n = 1而不是n % 2 == 0开始,则可以使用n < 0,这通常是一种较慢的操作。

否则,您将需要两个变量。

怎么样:

var n = 1;
while(...)
    n = n < 0 ? -(n - 1) : -(n + 1);

您可以始终使用以下方法:

for (var i = 1; i < 8; i++) {
  var isOdd = (i % 2 === 1);
  var j = (isOdd - !isOdd) * i;
}

顺便说一句,这类似于在JavaScript:中获得数字的符号(-1、0或1的三态)

var sign = (num > 0) - (num < 0)
for (var n = 1; Math.abs(n) < 10; (n ^= -1) > 0 && (n += 2))
   console.log (n);

一些比特操作-怎么样

n = 1;
while(...)
{
    if(n&1)
    cout<<n<<",";
    else
    cout<<~n+1<<",";
}

没有什么比这更棒的了!!

怎么样:

while (...) 
{ 
    if (n * -1 > 0) { n -= 1; }
    else { n += 1; } 
    n *= -1;
}

似乎是最简单的方法。