2020年2月29日 星期六

數學公式解的方便之處

今天在日常刷 codewars 時,遇到需要連續正整數相加求和 (ex: 1+2+3...+n),
以我會直覺想到的就是直接用 for loop 解決,但是我突然想找找看有沒有其他的方法。
在強大的 google 幫助下找到了 Σ 這個數學符號,
又以 Σ 為關鍵字找到了數學相關的線上教學頻道獲得了以下的公式 :
1+2+3...+n = 1/2n(n+1)

接著馬上寫了幾行簡單的 code 做測試
    function subFor(n) {
      let sub = 0;
      for(let i = 0i <= ni++) {
        sub += i;
      }
      return sub;
    }
    console.time('test for');
    console.log(subFor(10000));
    console.timeEnd('test for');

    function sub(n) {
      return n*(n+1)/2;
    }
    console.time('test 公式');
    console.log(sub(10000));
    console.timeEnd('test 公式');

測試的結果為下圖

結論: 單純以求和為目的的話用公式解法能得到相當優異的效率,當然是在 n 相當大的情況下,果然在優化方面數學還是佔有一席之地的啊...有機會的話我也要多多少少補一點數學呢。

另外我發現,直接從 vscode 複製代碼直接貼到 Blogger 裡會有背景加代碼分色的效果呢,只是貼完之後要切到 HTML 改一下 line-height ,不然他預設的間距讓我看了不舒服...

沒有留言:

張貼留言