Skip to content

Commit e438278

Browse files
committed
translated task 3
1 parent 66239c0 commit e438278

File tree

2 files changed

+38
-38
lines changed

2 files changed

+38
-38
lines changed
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+
Prima soluție pe care am putea-o încerca aici este cea recursivă.
22

3-
Fibonacci numbers are recursive by definition:
3+
Numerele Fibonacci sunt recursive prin definiție:
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); // va fi extrem de lent!
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+
...Dar pentru valori mari ale lui `n` este foarte lent. De exemplu, `fib(77)` poate bloca motorul pentru o perioadă de timp, consumând toate resursele CPU.
1616

17-
That's because the function makes too many subcalls. The same values are re-evaluated again and again.
17+
Asta pentru că funcția face prea multe subapelări. Aceleași valori sunt reevaluate din nou și din nou.
1818

19-
For instance, let's see a piece of calculations for `fib(5)`:
19+
De exemplu, să vedem o bucată de calcule pentru `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+
Aici putem vedea că valoarea lui `fib(3)` este necesară atât pentru `fib(5)` cât și pentru `fib(4)`. Deci `fib(3)` va fi apelat și evaluat de două ori în mod complet independent.
2929

30-
Here's the full recursion tree:
30+
Iată arborele de recursivitate complet:
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+
Putem observa în mod clar că `fib(3)` este evaluat de două ori, iar `fib(2)` este evaluat de trei ori. Suma totală a calculelor crește mult mai repede decât `n`, devenind enormă chiar și pentru `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+
Putem optimiza acest lucru prin memorarea valorilor deja evaluate: dacă o valoare de exemplu `fib(3)` este calculată o dată, atunci o putem reutiliza în calculele viitoare.
3737

38-
Another variant would be to give up recursion and use a totally different loop-based algorithm.
38+
O altă variantă ar fi să renunțăm la recursivitate și să folosim un algoritm complet diferit bazat pe loop.
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 loc să mergem de la `n` în jos la valori mai mici, putem face un loop care pornește de la `1` și `2`, apoi obține `fib(3)` ca sumă a acestora, apoi `fib(4)` ca sumă a două valori anterioare, apoi `fib(5)` și merge în sus și în sus, până când ajunge la valoarea necesară. La fiecare pas trebuie să ne amintim doar două valori anterioare.
4141

42-
Here are the steps of the new algorithm in details.
42+
Iată pașii noului algoritm în detaliu.
4343

44-
The start:
44+
Începutul:
4545

4646
```js
47-
// a = fib(1), b = fib(2), these values are by definition 1
47+
// a = fib(1), b = fib(2), aceste valori sunt prin definiție 1
4848
let a = 1, b = 1;
4949

50-
// get c = fib(3) as their sum
50+
// obțineți c = fib(3) ca sumă a acestora
5151
let c = a + b;
5252

53-
/* we now have fib(1), fib(2), fib(3)
53+
/* acum avem 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+
Acum dorim să obținem `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+
Să schimbăm variabilele: `a,b` vor obține `fib(2),fib(3)`, iar `c` va obține suma lor:
6262

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

68-
/* now we have the sequence:
68+
/* acum avem secvența:
6969
a b c
7070
1, 1, 2, 3
7171
*/
7272
```
7373

74-
The next step gives another sequence number:
74+
Următorul pas oferă un alt număr de secvență:
7575

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

81-
/* now the sequence is (one more number):
81+
/* acum secvența este (încă un număr):
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+
...Și așa mai departe până când obținem valoarea necesară. Acest lucru este mult mai rapid decât recursivitatea și nu implică calcule duplicate.
8888

89-
The full code:
89+
Codul complet:
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+
Bucla începe cu `i=3`, deoarece prima și a doua valoare a secvenței sunt hard-coded în variabilele `a=1`, `b=1`.
109109

110-
The approach is called [dynamic programming bottom-up](https://en.wikipedia.org/wiki/Dynamic_programming).
110+
Abordarea se numește [programare dinamică de jos în sus](https://en.wikipedia.org/wiki/Dynamic_programming).

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+
# Numere Fibonacci
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+
Secvența [numerelor Fibonacci](https://en.wikipedia.org/wiki/Fibonacci_number) are formula <code>F<sub>n</sub> = F<sub>n-1</sub> + F<sub>n-2</sub></code>. Cu alte cuvinte, următorul număr este suma celor două numere precedente.
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+
Primele două numere sunt `1`, apoi `2(1+1)`, apoi `3(1+2)`, `5(2+3)` și așa mai departe: `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+
Numerele Fibonacci sunt legate de [Golden ratio](https://en.wikipedia.org/wiki/Golden_ratio) și de multe fenomene naturale din jurul nostru.
1212

13-
Write a function `fib(n)` that returns the `n-th` Fibonacci number.
13+
Scrieți o funcție `fib(n)` care să returneze al `n-lea` număr Fibonacci.
1414

15-
An example of work:
15+
Un exemplu de lucrare:
1616

1717
```js
18-
function fib(n) { /* your code */ }
18+
function fib(n) { /* codul tău */ } }
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. Funcția ar trebui să fie rapidă. Apelul la `fib(77)` nu ar trebui să dureze mai mult de o fracțiune de secundă.

0 commit comments

Comments
 (0)