Sae/note

【もりけん塾】言語チャレンジ@カウントダウンの方法を考える

目次

    もりけん塾で新たに追加された課題....「 言語チャレンジ 」に取り組んでいます。

    課題はあらかじめinputする値が決まっていて、outputの値が戻り値になる様なコードを書きます
    ここではoutputの値が、課題で提示されている通りになっていればクリアとなります。

    今回は、課題15に取り組みました!

    課題14

    input

    3
    

    output

    3
    2
    1
    0
    

    Don't write

    function a(){
      count(3)
      count(2)
      count(1)
      count(0)
    }
    

    インクリメント・デクリメント復習

    loopでできそう...
    デクリメントで、inputした値から1ずつ引いていけばいいかな

    演算子の場所によって返される値が違った気がする。なんだっけな

    オペランドに後置で演算子を付けると (例えば、 x++) 、インクリメント演算子はインクリメントしますが、インクリメント前の値を返します。
    オペランドに前置で演算子を付けると (例えば、 ++x) 、インクリメント演算子はインクリメントし、インクリメント後の値を返します。

    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Increment

    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Decrement

    for文 ver

    loopといえばfor文

    とりあえずfor文で書いてみる

     const input = 3;
     const f = parma => {
       for (let i = parma; i >= 0; i--) {
          console.log(i)
        }
      }
    f(input);
    

    while文 ver

    while文でもできそう

    whileの方が早いって聞いたことあるぞ....!

    const input = 3;
    const f = parma => {
     while (parma >= 0) {
      console.log(parma);
      parma--;
     }
    }
     f(input);
    

    for vs while

    console.timeとconsole.timeEndを使用してそれぞれタイムを測ってみる

    const input = 3;
    const forVer = parma => {
     console.time("for")
     for (let i = parma; i >= 0; i--) {
       console.log(i)
      }
      console.timeEnd("for");
    }
    forVer(input);
    
    const whileVer = parma => {
     console.time("while")
      while (parma >= 0) {
       console.log(parma);
         parma--;
       }
       console.timeEnd("while");
    }
    whileVer(input);
    

    結果は以下の様になりました、今回の条件であればwhileの方がはやかったです

    再帰関数 ver

    loopについて調べていると、再帰関数なるものをみつけましたので、
    再帰関数Verも考えてみました

    const input = 3;
    const f = (parma) => {
     console.log(parma);
     (parma > 0) && f(--parma);
    }
    f(input);
    

    引数が0以上であれば、デクリメントした後の 値を自身の関数の引数に渡し実行する

    参考記事

    https://launchschool.com/books/javascript/read/loops_iterating

    https://www.section.io/engineering-education/javascript-iterations-which-one-is-faster/


    もりけん塾でJavaScriptを学習をしています!
    もりけん先生のTwitter:https://twitter.com/terrace_tech

    https://kenjimorita.jp/