Skip to content

Commit d619cf4

Browse files
authored
👾 smth
1 parent 05b4260 commit d619cf4

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

1-js/06-advanced-functions/01-recursion/01-sum-to/solution.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
Решение с помощью цикла:
23

34
```js run
@@ -37,4 +38,4 @@ P.S. Надо ли говорить, что решение по формуле
3738

3839
Вариант с циклом – второй по скорости. Он быстрее рекурсии, так как операций сложения столько же, но нет дополнительных вычислительных затрат на организацию вложенных вызовов. Поэтому рекурсия в данном случае работает медленнее всех.
3940

40-
P.P.S. Некоторые движки поддерживают оптимизацию "хвостового вызова": если рекурсивный вызов является самым последним в функции (`sumTo` выше не будет оптимизирован, т.к. последним происходит сложение, а не рекурсивный вызов), то внешней функции не нужно будет возобновлять выполнение и не нужно запоминать контекст его выполнения. В итоге требования к памяти снижаются, и сумма `sumTo(100000)` будет успешно вычислена. Но если JavaScript-движок не поддерживает это (большинство не поддерживают), будет ошибка: максимальный размер стека превышен, так как обычно существует ограничение на максимальный размер стека.
41+
P.P.S. Некоторые движки поддерживают оптимизацию "хвостового вызова": если рекурсивный вызов является самым последним в функции, без каких-либо других вычислений, то внешней функции не нужно будет возобновлять выполнение и не нужно запоминать контекст его выполнения. В итоге требования к памяти снижаются. Но если JavaScript-движок не поддерживает это (большинство не поддерживают), будет ошибка: максимальный размер стека превышен, так как обычно существует ограничение на максимальный размер стека.

1-js/06-advanced-functions/01-recursion/article.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# Рекурсия и стек
23

34
Вернёмся к функциям и изучим их более подробно.
@@ -61,7 +62,7 @@ pow(2, 4) = 16
6162
if n==1 = x
6263
/
6364
pow(x, n) =
64-
\
65+
\
6566
else = x * pow(x, n - 1)
6667
```
6768

@@ -515,6 +516,7 @@ list.next = list.next.next;
515516
## Итого
516517

517518
Термины:
519+
518520
- *Рекурсия* - это термин в программировании, означающий вызов функцией самой себя. Рекурсивные функции могут быть использованы для элегантного решения определённых задач.
519521

520522
Когда функция вызывает саму себя, это называется *шагом рекурсии*. *База* рекурсии - это такие аргументы функции, которые делают задачу настолько простой, что решение не требует дальнейших вложенных вызовов.
@@ -527,7 +529,7 @@ list.next = list.next.next;
527529
list = { value, next -> list }
528530
```
529531

530-
Деревья, такие как дерево HTML-элементов или дерево отделов из этой главы, также являются рекурсивными: они разветвляются, и каждая ветвь может содержать другие ветви.
532+
Деревья, такие как дерево HTML-элементов или дерево отделов из этой главы, также являются рекурсивными: у них есть ветви, и каждая ветвь может содержать другие ветви.
531533

532534
Как мы видели в примере `sumSalary`, рекурсивные функции могут быть использованы для прохода по ним.
533535

0 commit comments

Comments
 (0)