This commit is contained in:
Ilya Kantor 2014-11-16 01:40:20 +03:00
parent 962caebbb7
commit 87bf53d076
1825 changed files with 94929 additions and 0 deletions

View file

@ -0,0 +1,45 @@
Решение **с использованием цикла**:
```js
//+ run
function sumTo(n) {
var sum = 0;
for(var i=1; i<=n; i++) {
sum += i;
}
return sum;
}
alert( sumTo(100) );
```
Решение через **рекурсию**:
```js
//+ run
function sumTo(n) {
if (n == 1) return 1;
return n + sumTo(n-1);
}
alert( sumTo(100) );
```
Решение **по формуле**: `sumTo(n) = n*(n+1)/2`:
```js
//+ run
function sumTo(n) {
return n*(n+1)/2;
}
alert( sumTo(100) );
```
P.S. Надо ли говорить, что решение по формуле работает быстрее всех? Это очевидно. Оно использует всего три операции для любого `n`, а цикл и рекурсия требуют как минимум `n` операций сложения.
Вариант с циклом -- второй по скорости. Он быстрее рекурсии, так как операций сложения столько же, но нет дополнительных вычислительных затрат на организацию вложенных вызовов.
Рекурсия в данном случае работает медленнее всех.
P.P.S. Существует ограничение глубины вложенных вызовов, поэтому рекурсивный вызов `sumTo(100000)` выдаст ошибку.