Skip to content

Commit a584aef

Browse files
authored
Merge pull request #375 from git-antonyuk/patch-2
fix: translation
2 parents 878abee + cbdff73 commit a584aef

File tree

4 files changed

+45
-45
lines changed

4 files changed

+45
-45
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ sumTo(100) = 100 + 99 + ... + 2 + 1 = 5050
2121

2222
1. Використання циклу.
2323
2. Використання рекурсії, у випадку `sumTo(n) = n + sumTo(n-1)` для `n > 1`.
24-
3. Використання формули [арифметичної прогресії] (https://uk.wikipedia.org/wiki/Арифметична_прогресія).
24+
3. Використання формули [арифметичної прогресії](https://uk.wikipedia.org/wiki/Арифметична_прогресія).
2525

2626
Приклад результату:
2727

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
The first solution we could try here is the recursive one.
1+
Спершу ми можемо спробувати рекурсію.
22

3-
Fibonacci numbers are recursive by definition:
3+
Числа Фібоначчі є рекурсивними за визначенням:
44

55
```js run
66
function fib(n) {
@@ -9,14 +9,14 @@ function fib(n) {
99

1010
alert( fib(3) ); // 2
1111
alert( fib(7) ); // 13
12-
// fib(77); // will be extremely slow!
12+
// fib(77); // екстремально повільно!
1313
```
1414

15-
...But for big values of `n` it's very slow. For instance, `fib(77)` may hang up the engine for some time eating all CPU resources.
15+
...Але для великих значень `n` це дуже повільно. Наприклад, `fib(77)` може заморозити роботу рушія на деякий час, споживаючи всі ресурси центрального процесора.
1616

17-
That's because the function makes too many subcalls. The same values are re-evaluated again and again.
17+
При цьому, що функція продовжує широке дерево вкладених викликів. Тей самий ряд значень обчислюється знову і знову.
1818

19-
For instance, let's see a piece of calculations for `fib(5)`:
19+
Наприклад, подивимось на уривок обчислень `fib(5)`:
2020

2121
```js no-beautify
2222
...
@@ -25,68 +25,68 @@ fib(4) = fib(3) + fib(2)
2525
...
2626
```
2727

28-
Here we can see that the value of `fib(3)` is needed for both `fib(5)` and `fib(4)`. So `fib(3)` will be called and evaluated two times completely independently.
28+
Тут ми спостерігаємо що значення `fib(3)` потрібне для обох `fib(5)` та `fib(4)`. Тож `fib(3)` буде викликано два рази абсолютно незалежно.
2929

30-
Here's the full recursion tree:
30+
Ось повне дерево рекурсії:
3131

3232
![fibonacci recursion tree](fibonacci-recursion-tree.svg)
3333

34-
We can clearly notice that `fib(3)` is evaluated two times and `fib(2)` is evaluated three times. The total amount of computations grows much faster than `n`, making it enormous even for `n=77`.
34+
Ми можемо чітко простежити, що `fib(3)` вираховується двічі, а `fib(2)` -- тричі. Загальна кількість обчислень росте набагато швидше, ніж `n`, що робить його величезним навіть для `n=77`.
3535

36-
We can optimize that by remembering already-evaluated values: if a value of say `fib(3)` is calculated once, then we can just reuse it in future computations.
36+
Ми можемо оптимізувати це, запам’ятовуючи вже обчислені результати: якщо значення, скажімо, `fib(3)` обчислюється один раз, ми можемо просто повторно використовувати його в майбутніх обчисленнях.
3737

38-
Another variant would be to give up recursion and use a totally different loop-based algorithm.
38+
Як інший варіант, ми можемо відмовитись від рекурсії та використати зовсім інший алгоритм на основі циклу.
3939

40-
Instead of going from `n` down to lower values, we can make a loop that starts from `1` and `2`, then gets `fib(3)` as their sum, then `fib(4)` as the sum of two previous values, then `fib(5)` and goes up and up, till it gets to the needed value. On each step we only need to remember two previous values.
40+
Замість переходу від `n` до нижчих значень ми можемо створити цикл, який починається з `1` і `2`, потім отримує `fib(3)` як їхню суму, а потім `fib(4)` як суму двох попередніх значень, потім `fib(5)` і йде вгору і вгору, поки не досягне потрібного значення. На кожному кроці нам потрібно лише запам’ятати два попередні значення.
4141

42-
Here are the steps of the new algorithm in details.
42+
Ось кроки нового алгоритму в деталях.
4343

44-
The start:
44+
Початок:
4545

4646
```js
47-
// a = fib(1), b = fib(2), these values are by definition 1
47+
// a = fib(1), b = fib(2), ці значення типово дорівнюють одиниці
4848
let a = 1, b = 1;
4949

50-
// get c = fib(3) as their sum
50+
// get c = fib(3) як їх сума
5151
let c = a + b;
5252

53-
/* we now have fib(1), fib(2), fib(3)
53+
/* тепер ми маємо fib(1), fib(2), fib(3)
5454
a b c
5555
1, 1, 2
5656
*/
5757
```
5858

59-
Now we want to get `fib(4) = fib(2) + fib(3)`.
59+
Тепер ми хочемо отримати `fib(4) = fib(2) + fib(3)`.
6060

61-
Let's shift the variables: `a,b` will get `fib(2),fib(3)`, and `c` will get their sum:
61+
Зсуньмо змінні: `a,b` і отримаємо `fib(2),fib(3)` та `c` отримає їх суму:
6262

6363
```js no-beautify
64-
a = b; // now a = fib(2)
65-
b = c; // now b = fib(3)
64+
a = b; // тепер a = fib(2)
65+
b = c; // тепер b = fib(3)
6666
c = a + b; // c = fib(4)
6767

68-
/* now we have the sequence:
68+
/* тепер ми маємо таку послідовність:
6969
a b c
7070
1, 1, 2, 3
7171
*/
7272
```
7373

74-
The next step gives another sequence number:
74+
Наступний крок дає нове число послідовності:
7575

7676
```js no-beautify
77-
a = b; // now a = fib(3)
78-
b = c; // now b = fib(4)
77+
a = b; // тепер a = fib(3)
78+
b = c; // тепер b = fib(4)
7979
c = a + b; // c = fib(5)
8080

81-
/* now the sequence is (one more number):
81+
/* тепер послідовність така (на одне число більше):
8282
a b c
8383
1, 1, 2, 3, 5
8484
*/
8585
```
8686

87-
...And so on until we get the needed value. That's much faster than recursion and involves no duplicate computations.
87+
...І так далі, поки не отримаємо потрібне значення. Це набагато швидше, ніж рекурсія, і не вимагає повторних обчислень.
8888

89-
The full code:
89+
Повний код:
9090

9191
```js run
9292
function fib(n) {
@@ -105,6 +105,6 @@ alert( fib(7) ); // 13
105105
alert( fib(77) ); // 5527939700884757
106106
```
107107

108-
The loop starts with `i=3`, because the first and the second sequence values are hard-coded into variables `a=1`, `b=1`.
108+
Цикл починається з `i=3`, тому що перше та друге значення послідовності жорстко закодовані в змінних `a=1`, `b=1`.
109109

110-
The approach is called [dynamic programming bottom-up](https://en.wikipedia.org/wiki/Dynamic_programming).
110+
Підхід називається [динамічне програмування знизу вгору](https://uk.wikipedia.org/wiki/Динамічне_програмування).

1-js/06-advanced-functions/01-recursion/03-fibonacci-numbers/task.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,24 @@ importance: 5
22

33
---
44

5-
# Fibonacci numbers
5+
# Числа Фібоначчі
66

7-
The sequence of [Fibonacci numbers](https://en.wikipedia.org/wiki/Fibonacci_number) has the formula <code>F<sub>n</sub> = F<sub>n-1</sub> + F<sub>n-2</sub></code>. In other words, the next number is a sum of the two preceding ones.
7+
Послідовність [чисел Фібоначчі](https://uk.wikipedia.org/wiki/Послідовність_Фібоначчі) має формулу <code>F<sub>n</sub> = F<sub>n-1</sub> + F<sub>n-2</sub></code>. Іншими словами, наступне число є сумою двох попередніх.
88

9-
First two numbers are `1`, then `2(1+1)`, then `3(1+2)`, `5(2+3)` and so on: `1, 1, 2, 3, 5, 8, 13, 21...`.
9+
Перші два числа: `1`, потім `2(1+1)`, потім `3(1+2)`, `5(2+3)` і так далі: `1, 1, 2, 3, 5, 8, 13, 21...`.
1010

11-
Fibonacci numbers are related to the [Golden ratio](https://en.wikipedia.org/wiki/Golden_ratio) and many natural phenomena around us.
11+
Числа Фібоначчі пов’язані із [золотим перетином](https://uk.wikipedia.org/wiki/Золотий_перетин) і багатьма природними явищами навколо нас.
1212

13-
Write a function `fib(n)` that returns the `n-th` Fibonacci number.
13+
Напишіть функцію `fib(n)`, яка повертає `n-th` число Фібоначчі.
1414

15-
An example of work:
15+
Приклад:
1616

1717
```js
18-
function fib(n) { /* your code */ }
18+
function fib(n) { /* твій код */ }
1919

2020
alert(fib(3)); // 2
2121
alert(fib(7)); // 13
2222
alert(fib(77)); // 5527939700884757
2323
```
2424

25-
P.S. The function should be fast. The call to `fib(77)` should take no more than a fraction of a second.
25+
P.S. Функція повинна бути швидкою. Виклик `fib(77)` має тривати не більше частки секунди.

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ pow(x, n) =
6666
```
6767

6868
1. Якщо `n == 1`, то все тривіально. Це називається *база* рекурсії, оскільки вона негайно виробляє очевидний результат: `pow(x, 1)` дорівнює `x`.
69-
2. Інакше ми можемо представляти `pow(x, n)` як `x * pow(x, n)`. У математиці можна написати <code>x<sup>n</sup> = x * x<sup>n-1</sup></code>. Це називається *рекурсивний крок*: ми перетворюємо завдання на простішу дію (множення за допомогою `x`) та на простий виклик того ж завдання (`pow` з меньшим `n`). Наступні кроки спрощують його далі і далі до `n`, що дорівнює `1`.
69+
2. Інакше ми можемо представляти `pow(x, n)` як `x * pow(x, n)`. У математиці можна написати <code>x<sup>n</sup> = x * x<sup>n-1</sup></code>. Це називається *рекурсивний крок*: ми перетворюємо завдання на простішу дію (множення за допомогою `x`) та на простий виклик того ж завдання (`pow` з меншим `n`). Наступні кроки спрощують його далі і далі до `n`, що дорівнює `1`.
7070

71-
Ми також можемо сказати, що `pow` *рекурсивно викликаэ себе* до`n == 1`.
71+
Ми також можемо сказати, що `pow` *рекурсивно викликає себе* до`n == 1`.
7272

7373
![рекурсивна діаграма pow](recursion-pow.svg)
7474

@@ -117,11 +117,11 @@ function pow(x, n) {
117117
- Вкладений виклик виконується.
118118
- Після закінчення, старий контекст виконання витягується з стека, і зовнішня функція відновлюється з того місця, де вона зупинилася.
119119

120-
Давайте подивимося, що відбувається під час виклика `pow(2, 3)`.
120+
Давайте подивимося, що відбувається під час виклику `pow(2, 3)`.
121121

122122
### pow(2, 3)
123123

124-
На початку виклика `pow(2, 3)` контекст виконання буде зберігати змінні: `x = 2, n = 3`, потік виконання знаходиться на рядку `1` функції.
124+
На початку виклику `pow(2, 3)` контекст виконання буде зберігати змінні: `x = 2, n = 3`, потік виконання знаходиться на рядку `1` функції.
125125

126126
Ми можемо намалювати його наступним чином:
127127

@@ -412,7 +412,7 @@ alert(sumSalaries(company)); // 7700
412412
413413
### Зв’язаний список
414414
415-
Imagine, we want to store an ordered list of objects.
415+
Уявіть, що ми хочемо зберегти впорядкований список об’єктів.
416416
417417
Очевидним вибором буде масивом:
418418
@@ -535,7 +535,7 @@ list.next = list.next.next;
535535
list = { value, next -> list }
536536
```
537537
538-
Дерева, такі як HTML-елементи або дерево відділів з цієї глави, також є рекурсивними: вони розгалуджуються та кожна гілка може мати інші гілки.
538+
Дерева, такі як HTML-елементи або дерево відділів з цієї глави, також є рекурсивними: вони розгалужуються та кожна гілка може мати інші гілки.
539539
540540
Рекурсивні функції можуть бути використані для того, щоб пройти їх, як ми бачили у прикладі `sumSalary`.
541541

0 commit comments

Comments
 (0)