与えられたときに、何も考えずにループで書いたんですが、
「100000000みたいな大きな数値を与えられたら、使い物にならない糞みたいなコードだぜ!」という意味合いの事を限りなくソフトな言い方でたしなめられつつ解を教えてもらったんですが、その内容を今から実行して体感してみたいと思います。
ループで記述
$n = 100000000;
$sum = 0;
for ($i = 1; $i <= $n; $i++) {
$sum += $i;
}
var_dump($sum);
教えてもらった方
$n = 100000000;
$sum = $n * ($n + 1) / 2;
var_dump($sum);
関数化して時間を確認
$n = 100000000;
$time_start = microtime(true);
$sum = sumOneToLimit($n);
var_dump($sum);
var_dump(microtime(true) - $time_start);
$time_start = microtime(true);
$sum = calOneToLimit($n);
var_dump($sum);
var_dump(microtime(true) - $time_start);
function sumOneToLimit($n) {
$sum = 0;
for ($i = 1; $i <= $n; $i++) {
$sum += $i;
}
return $sum;
}
function calOneToLimit($n) {
return $n * ($n + 1) / 2;
}
実行結果
int 5000000050000000
float 16.202419042587
int 5000000050000000
float 1.0013580322266E-5
ぐはぁっ