使用+ 1 / -1而不使用if / else“翻转”简单循环的输出

时间:2012-12-24 15:34:18

标签: algorithm loops language-agnostic

假设我有以下输出整数的基本循环:

for (var i = 0; i < 6; i++) {
    echo i;
}

/* Output: 0 1 2 3 4 5 */

是否可以使用简单变量5 4 3 2 1 0将其输出“翻转”到flag,其值只能是1-1,而不使用{{1} }}?

主要在JavaScript中寻找答案,但这应该是一个与语言无关的问题。

3 个答案:

答案 0 :(得分:7)

您可以将起点计算为5 * (1 - flag) / 2。您可以以类似的方式计算一个值,以便在结束点的条件中使用,但更容易始终循环相同的值,并从循环变量计算实际值:

start = 5 * (1 - flag) / 2;
for (var i = 0; i < 6; i++) {
  echo start + i * flag;
}

答案 1 :(得分:2)

你需要知道范围N,因为你无法知道如何映射0 - &gt; 5

echo ((flag-1)/2)*(-N+1) + (flag*i) 

答案 2 :(得分:-4)

使用三元运算符(使用flag为true或false):

var max_number = 5;
var min_number = 0;
var flag = true;

for(var i = (flag ? min_number : max_number);
    (flag ? i < max_number : i > min_number);
    (flag ? ++i : --i)){

    console.log(i);

}

演示:http://jsfiddle.net/maniator/b26T8/