2011-11-29 2 views
6

私は数学的専門家ではないことを認めなければならないので、次の問題を私の満足のために解決できません。ループカウントを100に戻し、0に戻して100に戻すなど

私は数字があります。例えば、i = 0です。私はそれぞれの呼び出しで1を増やし、それから自分自身を呼び出して、別の時間と別のものを増やす機能を持っています... 100に達したら、それを0に逆算して、再び上向きにしたい、私はエレベーターのように上下に行きます。そのためのエレガントなソリューションとは何ですか?

これまでの私のソリューション:私は短い何かを探しています

var countingUp = true; 
var i = 0; 

function count() { 
if(i < 100 && countingUp) {i+=1} 
if(i > 1 && !countingUp) {i-=1} 

if(i===100) {countingUp=false;} 
if(i===1) {countingUp=true;} 

count() 
} 
count() 

+0

は(私は願って)カウントの間にいくつかの遅延があるでしょうか?さもなければあなたの環境はちょうどロックアップします。 – RightSaidFred

+0

はい、このコードを試してみません。これはそのアイデアを示すためだけです。 – Hans

答えて

6

私には[OK]を見える、おそらく奴隷にあなたの犬を販売し、あなたのビールを盗むします:

var direction = 1; 
var i = 0; 

function count() { 
    i += direction; 
    direction *= (((i % 100) == 0) ? -1 : 1); 
} 
+0

タイトに見えるi%100は何ですか? – Hans

+1

100で割って余りを返します – Arjan

+0

このコードを実行すると、 Uncaught SyntaxError:予期せぬトークン) "1つの角かっこへ方向* =((i%100 == 0)?-1:1) – Hans

3

肯定または否定の場合は、金額を追加または減額する変数を設定することができます。したがって、可変記号を変更するだけで済みます。無限の再帰を避けるために

var countingUp = 1; 
var i = 0; 

function count() { 

    i += (1 * countingUp); 

    if (i == 100 || i == 0) 
    { 
     countingUp *= -1; 
    } 
} 

fiddle here.

、単に()のsetIntervalを使用しています。

window.setInterval(count, 1); 
+0

無限の再帰があります... count calls呼び出し回数... –

+0

無限再帰... whileループ...同じことです(OK、JSランタイムは末尾再帰をサポートしていないので、同じことではありません:() – hugomg

+0

@missingnoはsetIntervalを使用して同じ関数内で同じ関数を呼び出すのを避ける...私の編集したフィドルを確認する –

1

楽しみのためだけに:

function createCounter(min,max) { 
    var dir = -1, val = min; 
    return function() { return val += ((val >= max || val <= min) ? dir=-dir : dir); } 
} 

をし、それ

を使用します
var counter = createCounter(0,5); 
counter(); // 1 
counter(); // 2 
counter(); // 3 
counter(); // 4 
counter(); // 5 
counter(); // 4 
counter(); // 3 
counter(); // 2 
counter(); // 1 
counter(); // 0 
counter(); // 1 
counter(); // 2 
4

abs((i % 200) - 100)は、私が増えるにつれてあなたが望む鋸歯模様を作ります。

それでは、このような何か:

var i = 100; 
while (1) { 
    var j = Math.abs((i % 200) - 100); 
    // Use j 
    // ... 
    i += 1; 
} 
関連する問題