Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 双向循环_Php_Javascript_Loops_For Loop - Fatal编程技术网

Php 双向循环

Php 双向循环,php,javascript,loops,for-loop,Php,Javascript,Loops,For Loop,嘿,我正在寻找这个问题的干净解决方案: 在第二个循环步骤中,我以i=0开始循环i=1,然后i=-1然后i=2等 如何以干净的方式使用for循环对其进行编程?如果您不介意内部循环出现3次: f(0); for (var i = 1; i <= 3; ++ i) { f(i); f(-i); } 一次但表情丑陋: for (var j = 1; j <= 7; ++ j) { var i = j / 2; if (j % 2) i = -i; f(i);

嘿,我正在寻找这个问题的干净解决方案:

在第二个循环步骤中,我以
i=0
开始循环
i=1
,然后
i=-1
然后
i=2


如何以干净的方式使用
for
循环对其进行编程?

如果您不介意内部循环出现3次:

f(0);
for (var i = 1; i <= 3; ++ i) {
  f(i);
  f(-i);
}
一次但表情丑陋:

for (var j = 1; j <= 7; ++ j) {
   var i = j / 2;
   if (j % 2) i = -i;

   f(i);
}
for(var j=1;j
f(0);//使用0进行填充

对于(var i=1;i每个循环,您似乎在添加
n*(-1)^(n+1)
,其中n是您当前正在执行的步骤,从1开始,从i=0开始

initialize i = 0
n=0, i+=0*(-1)^1   # 0
n=1, i+=1*(-1)^2   # 1
n=2, i+=2*(-1)^3   # -1
n=3, i+=3*(-1)^4   # 2
等等

从这里开始,这取决于您希望用什么语言编写。从
n=0
迭代到您停止的任何地方

编辑这是一个糟糕的答案。但是fun=D


(我添加了最后一点,因为一旦我进行了编辑,就有人否决了我=()

这里是javascript的实现

for ( var i = 0; Math.abs(i)<10; i=(i<=0?Math.abs(i)+1:-i)) {
  console.debug(i) 
}
for(var i=0;Math.abs(i)
for(int i=0;i<10;i++)
{
int div=i/2;
int mod=i%2;
整数偏移量=mod==0?div:-div;
}

我使用了正弦函数:

for ($i = 0; $i < 10; $i++)
{
    echo round(0.5 * $i * sin((0.5 + $i) * M_PI))."\n";
}
($i=0;$i<10;$i++)的

{
回声圆(0.5*$i*sin((0.5+$i)*M_-PI))。“\n”;
}

对falling bullet解决方案的修改,将在无特殊条件的情况下处理0索引情况

//do stuff with 0
for(int i = 0; i< (arrayLength/2); i++)
{
    //do stuff with i

    if(-i != i)
    {
        //do stuff with negIndex
    }
}
//使用0执行操作
对于(int i=0;i<(阵列长度/2);i++)
{
//和我一起做事
如果(-i!=i)
{
//用negIndex做一些事情
}
}

这个循环有一个模式。在数字行上查看它-它是这样的:

  • 后退0步
  • 向前一步
  • 后退2步
  • 向前迈出3步
  • 后退4步
这里有一个解决方案-在循环的每次迭代中不断增加步长,每次都反转方向(向前/向后)。不断增加当前值

// n is the number of elements to generate
for(var i = 0, value = 0, dir = -1; i < n; i++) {
    value = value + (dir * i);
    console.log(value);
    dir = dir * -1; // reverse direction
}

在C中,N的值是您希望产生的序列中的值的总数

int i, n = 0, m = 1;
for (i = 1; i < N; i++, m = -m) {
    /* n is the next in the sequence */
    n += m * i;
}
inti,n=0,m=1;
对于(i=1;i
一加一减一反:

for(int i=0, d=1, f=-1; i<10; i+=d, d=f-d, f=-f)
{
    printf("%d\n", i);
}

值得一提的是,以下是我自己对这个问题的解释

for (var i = 0; i > -8; i = (i<=0) - i) // arbitrary condition stops loop at -8

对于(var i=0;i>-8;i=(i我可能会选择:

for (var i = 0; i <= max; i = ( i <= 0 ) ? -i + 1 : -i)
{
    f( i );
}

用于(var i=0;i既然您要求一个特定的实现,那么您使用的是哪种语言?+1以获得形式上的优雅;为了避免代码重复,您可能必须将Dou内容提取到一个单独的函数中,但否则它非常漂亮。这不是有效的JavaScript或PHP。
var
,而不是
int
@antpaw whhhhyyyyyyyyy?除了最丑陋之外,它在处理方面也是最复杂和最低效的。+1.另一种可能的解决方案,如果我们没有随机访问,但只有双向访问链表,这可能是必需的,例如,使用两个迭代器(一个递减,另一个递增,并在开始时访问第一个元素)。您甚至可以将其“改进”为
j/2*-((j%2)*2-1)
通过执行
i=0;i减少对数学的依赖
int i, n = 0, m = 1;
for (i = 1; i < N; i++, m = -m) {
    /* n is the next in the sequence */
    n += m * i;
}
for(int i=0, d=1, f=-1; i<10; i+=d, d=f-d, f=-f)
{
    printf("%d\n", i);
}
push        esi  
push        offset string "%d\n" (0D20F4h)  
call        dword ptr [__imp__printf (0D20A4h)]  
mov         eax,ebx  
add         esi,edi  
sub         eax,edi  
add         esp,8  
neg         ebx  
mov         edi,eax  
cmp         esi,0Ah  
jl          wmain+10h (0D1010h)  
for (var i = 0; i > -8; i = (i<=0) - i) // arbitrary condition stops loop at -8
for (var i = 0; i <= max; i = ( i <= 0 ) ? -i + 1 : -i)
{
    f( i );
}