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
+34-34Lines changed: 34 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -293,7 +293,7 @@ Recursivitatea poate oferi un cod mai scurt, ușor de înțeles și de susținut
293
293
294
294
O altă aplicație excelentă a recursivității este traversarea recursivă.
295
295
296
-
Imaginați-vă, că avem o companie. Structura personalului poate fi prezentată ca un object:
296
+
Imaginați-vă, că avem o companie. Structura personalului poate fi prezentată ca un obiect:
297
297
298
298
```js
299
299
let company = {
@@ -389,48 +389,48 @@ Observați că codul folosește caracteristici inteligente pe care le-am mai aco
389
389
- Bucla `for(val of Object.values(obj))` pentru a itera peste valorile obiectului:`Object.values` returnează un array al acestora.
390
390
391
391
392
-
## Recursive structures
392
+
## Structuri recursive
393
393
394
-
Arecursive (recursively-defined) data structure is a structure that replicates itself in parts.
394
+
O structură de date recursivă (definită în mod recursiv) este o structură care se reproduce pe sine în părți.
395
395
396
-
We've just seen it in the example of a company structure above.
396
+
Tocmai am văzut-o în exemplul structurii unei companii de mai sus.
397
397
398
-
A company *department* is:
399
-
- Either an array of people.
400
-
- Or an object with *departments*.
398
+
Un *departament* al unei companii este:
399
+
-Fie un array de persoane.
400
+
-Ori un obiect cu *departamente*.
401
401
402
-
For web-developers there are much better-known examples: HTML and XML documents.
402
+
Pentru dezvoltatorii web există exemple mult mai bine cunoscute: Documentele HTMLșiXML.
403
403
404
-
In the HTML document, an *HTML-tag* may contain a list of:
405
-
- Text pieces.
406
-
- HTML-comments.
407
-
- Other *HTML-tags* (that in turn may contain text pieces/comments or other tags etc).
404
+
În documentulHTML, un*HTML-tag*poate conține o listă de:
405
+
-Bucăți de text.
406
+
-Comentarii HTML.
407
+
-Alte *tag-uri HTML* (care, la rândul lor, pot conține bucăți de text/comentarii sau alte tag-uri etc).
408
408
409
-
That's once again a recursive definition.
409
+
Aceasta este din nou o definiție recursivă.
410
410
411
-
For better understanding, we'll cover one more recursive structure named "Linked list" that might be a better alternative for arrays in some cases.
411
+
Pentru o mai bună înțelegere, vom acoperi încă o structură recursivă numită"Linked list"care ar putea fi o alternativă mai bună pentru array-uri în anumite cazuri.
412
412
413
413
### Linked list
414
414
415
-
Imagine, we want to store an ordered list of objects.
415
+
Imaginați-vă, că dorim să stocăm o listă ordonată de obiecte.
416
416
417
-
The natural choice would be an array:
417
+
Alegerea naturală ar fi un array:
418
418
419
419
```js
420
420
let arr = [obj1, obj2, obj3];
421
421
```
422
422
423
-
...But there's a problem witharrays. The"delete element"and"insert element"operations are expensive. For instance, `arr.unshift(obj)`operation has to renumber all elements to make room for a new`obj`, and if the array is big, it takes time. Samewith`arr.shift()`.
423
+
...Dar există o problemă cu array-urile. Operațiile"delete element"și"insert element"sunt costisitoare. De exemplu, operația `arr.unshift(obj)`trebuie să renumere toate elementele pentru a face loc unui nou `obj`, iar dacă array-ul este mare, durează mult. La fel cu`arr.shift()`.
424
424
425
-
The only structural modifications that do not require mass-renumbering are those that operate with the end ofarray:`arr.push/pop`. So an array can be quite slow for big queues, when we have to work with the beginning.
425
+
Singurele modificări structurale care nu necesită renumerotare în masă sunt cele care operează la sfârșitul array-ului:`arr.push/pop`. Deci un array poate fi destul de lent pentru cozile mari, atunci când trebuie să lucrăm cu începutul.
426
426
427
-
Alternatively, if we really need fast insertion/deletion, we can choose another data structure called a [linked list](https://en.wikipedia.org/wiki/Linked_list).
427
+
Alternativ, dacă avem cu adevărat nevoie de inserție/ștergere rapidă, putem alege o altă structură de date numită [linked list](https://en.wikipedia.org/wiki/Linked_list).
428
428
429
-
The *linked list element* is recursively defined as an object with:
429
+
*Elementul linked list* este definit recursiv ca un obiect cu:
430
430
-`value`.
431
-
-`next`property referencing the next *linked list element* or`null`if that's the end.
431
+
-proprietatea `next`care face referire la următorul *element din linked list* sau`null`dacă acesta este sfârșitul.
Here we can even more clearly see that there are multiple objects, each one has the `value` and `next` pointing to the neighbour. The `list` variable is the first object in the chain, so following `next` pointers from it we can reach any element.
465
+
Aici putem vedea și mai clar că există mai multe obiecte, fiecare dintre ele având`value`și`next`care indică vecinul. Variabila`list`este primul obiect din lanț, deci urmărind indicatoarele `next`de la ea putem ajunge la orice element.
466
466
467
-
The list can be easily split into multiple parts and later joined back:
467
+
Lista poate fi ușor împărțită în mai multe părți și ulterior reunită la loc:
468
468
469
469
```js
470
470
let secondList = list.next.next;
@@ -473,15 +473,15 @@ list.next.next = null;
473
473
474
474

475
475
476
-
To join:
476
+
Pentru a se uni:
477
477
478
478
```js
479
479
list.next.next = secondList;
480
480
```
481
481
482
-
And surely we can insert or remove items in any place.
482
+
Și cu siguranță putem introduce sau elimina elemente în orice loc.
483
483
484
-
For instance, to prepend a new value, we need to update the head of the list:
484
+
De exemplu, pentru a o prelungi cu o valoare nouă, trebuie să actualizăm capul listei:
To remove a value from the middle, change `next` of the previous one:
500
+
Pentru a elimina o valoare din mijloc, schimbați`next`din cea anterioară:
501
501
502
502
```js
503
503
list.next = list.next.next;
504
504
```
505
505
506
506

507
507
508
-
We made `list.next` jump over `1` to value `2`. The value `1` is now excluded from the chain. If it's not stored anywhere else, it will be automatically removed from the memory.
508
+
Am făcut ca `list.next`să sară peste `1`la valoarea`2`. Valoarea`1`este acum exclusă din lanț. Dacă nu este stocată în altă parte, ea va fi eliminată automat din memorie.
509
509
510
-
Unlike arrays, there's no mass-renumbering, we can easily rearrange elements.
510
+
Spre deosebire de array-uri, nu există o renumerotare în masă, putem rearanja cu ușurință elementele.
511
511
512
-
Naturally, lists are not always better than arrays. Otherwise everyone would use only lists.
512
+
Firește, listele nu sunt întotdeauna mai bune decât array-urile. Altfel toată lumea ar folosi numai liste.
513
513
514
514
The main drawback is that we can't easily access an element by its number. In an array that's easy:`arr[n]` is a direct reference. Butin the list we need to start from the first item and go `next``N` times to get the Nth element.
0 commit comments