You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/01-recursion/article.md
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -218,7 +218,7 @@ alert( pow(2, 3) );
218
218
219
219
### Вихід
220
220
221
-
Під час виконання `pow(2, 1)`, умова `n==1`--це істинна, на відміну того, що було раніше, тому перша гілка працює`if`:
221
+
Під час виконання `pow(2, 1)`, умова `n==1`-- істинна, на відміну того, що було раніше, тому перша гілка виконує`if`:
222
222
223
223
```js
224
224
function pow(x, n) {
@@ -232,7 +232,7 @@ function pow(x, n) {
232
232
}
233
233
```
234
234
235
-
Немає більше вкладених викликів, тому функція закінчується, повертаючись`2`.
235
+
Немає більше вкладених викликів, тому функція закінчується, повертаючи`2`.
236
236
237
237
Оскільки функція завершується, то контекст виконання більше не потрібний, тому він видаляється з пам’яті. Попередній контекст відновлюється з вершини стека:
238
238
@@ -324,13 +324,13 @@ let company = {
324
324
325
325
Іншими словами, компанія має відділи.
326
326
327
-
- Відділи можуть мати масив персоналу. Наприклад, відділ продажу має 2 співробітника:Евген та Аліса.
327
+
- Відділи можуть мати масив персоналу. Наприклад, відділ продажу має 2 співробітника:Іван та Аліса.
328
328
- Або відділ може бути розділеним на підрозділи, наприклад, `development` має дві гілки:`sites` та `internals`. Кожна з них має свій персонал.
329
329
- Можливо також, що коли відділ зростає, він розділяється на субвідділи (або команди).
330
330
331
-
Наприклад, відділ `sites` у майбутньому може бути розділений на команди для `siteA` і `siteB`. І вони, потенційно, можуть бути розділити в подальшому. Це не зображено на малюнку, просто слід мати це на увазі.
331
+
Наприклад, відділ `sites` у майбутньому може бути розділений на команди для `siteA` і `siteB`. І вони, потенційно, можуть бути розділені в подальшому. Це не зображено на малюнку, просто слід мати це на увазі.
332
332
333
-
Тепер припустимо, що ми хочемо, щоб функція отримати суму всіх зарплат. Як ми можемо це зробити?
333
+
Тепер припустимо, що ми хочемо, щоб функція отримала суму всіх зарплат. Як ми можемо це зробити?
334
334
335
335
Ітеративний підхід нелегкий, тому що структура не проста. Перша ідея може полягати в тому, щоб зробити `for` цикл через `company` з вкладеним підциклами через 1-ий рівень відділів. Але тоді нам потрібно більше вкладених циклів, щоб ітеруватися через персонал у 2-му рівні, такому як `sites`... А потім ще один підцикл всередині них для 3-го рівня, який міг би з’явитися в майбутньому? Якщо ми поставимо 3-4 вкладені цикли у коді, щоб пройти один об’єкт, це стає досить потворним.
336
336
@@ -339,9 +339,9 @@ let company = {
339
339
Як ми бачимо, коли наша функція отримує відділ для підрахунку суми зарплат, є два можливі випадки:
340
340
341
341
1. Або це "простий" відділ з *масивом* людей -- тоді ми можемо підсумувати зарплату в простому циклі.
342
-
2. Або це *об’єкт* з `n` підвідділами -- тоді ми можемо зробити `n` рекурсивних дзвінки, щоб отримати суму для кожного з підвідділів та поєднати результати.
342
+
2. Або це *об’єкт* з `n` підвідділами -- тоді ми можемо зробити `n` рекурсивних викликів, щоб отримати суму для кожного з підвідділів та поєднати результати.
343
343
344
-
1-й випадок є базою рекурсії, тривіальном випадком, коли ми отримуємо масив.
344
+
1-й випадок є базою рекурсії, тривіальним випадком, коли ми отримуємо масив.
345
345
346
346
2-й випадок, коли ми отримуємо об’єкт, -- це рекурсивний крок. Комплексне завдання розділяється на підзадачі для менших відділів. Вони в свою чергу можуть знову поділятися на підвідділи, але рано чи пізно поділ закінчиться і зведеться до випадку (1).
0 commit comments