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
+11-7Lines changed: 11 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -188,7 +188,7 @@ El nuevo contexto de ejecución actual está en la parte superior (y en negrita)
188
188
Cuando terminamos la subllamada -- es fácil reanudar el contexto anterior, ya que mantiene ambas variables y el lugar exacto del código donde se detuvo. Aquí en la imagen usamos la palabra "línea", pero por supuesto es más precisa.
189
189
190
190
```smart
191
-
Here in the picture we use the word "line", as our example there's only one subcall in line, but generally a single line of code may contain multiple subcalls, like`pow(…) +pow(…) +somethingElse(…)`.
191
+
En la figura usamos la palabra línea "line" porque en nuestro ejemplo hay solo una subllamada en línea, pero generalmente una simple línea de código puede contener múltiples subllamadas, como`pow(…) +pow(…) +otraCosa(…)`.
192
192
So it would be more precise to say that the execution resumes "immediately after the subcall".
193
193
```
194
194
### pow(2, 1)
@@ -285,7 +285,7 @@ El iterativo `pow` utiliza un contexto único que cambia `i` y `result` en el pr
285
285
286
286
... Pero a veces la reescritura no es trivial, especialmente cuando la función utiliza sub-llamadas recursivas diferentes según las condiciones y combina sus resultados o cuando la ramificación es más compleja. Y la optimización puede ser innecesaria y no merece la pena el esfuerzo.
287
287
288
-
La recursión puede dar un código más corto, más fácil de entender y apoyar. No se requieren optimizaciones en todos los lugares, principalmente necesitamos un buen código, por eso se usa.
288
+
La recursión puede dar un código más corto, más fácil de entender y mantener. No se requieren optimizaciones en todos los lugares, principalmente necesitamos un buen código, por eso se usa.
289
289
290
290
## Recorridos recursivos
291
291
@@ -339,9 +339,9 @@ Como podemos ver, cuando nuestra función hace que un departamento sume, hay dos
339
339
1.O bien es un departamento "simple" con una *array de personas*-- entonces podemos sumar los salarios en un bucle simple.
340
340
2.O es *un objeto con subdepartamentos `N`*, entonces podemos hacer llamadas recursivas `N` para obtener la suma de cada uno de los subdepartamentos y combinar los resultados.
341
341
342
-
El(1) es la base de la recursividad, el caso trivial.
342
+
El primer caso es la base de la recursividad, el caso trivial, cuando obtenemos un "array"
343
343
344
-
El(2) es el paso recursivo. Una tarea compleja se divide en subtareas para departamentos más pequeños. A su vez, pueden dividirse nuevamente, pero tarde o temprano la división terminará en (1).
344
+
El segundo caso, cuando obtenemos un objeto, es el paso recursivo. Una tarea compleja se divide en subtareas para departamentos más pequeños. A su vez, pueden dividirse nuevamente, pero tarde o temprano la división terminará en (1).
345
345
346
346
El algoritmo es probablemente aún más fácil de leer desde el código:
347
347
@@ -410,7 +410,7 @@ Para una mejor comprensión, cubriremos una estructura recursiva más llamada "L
410
410
411
411
### Lista enlazada
412
412
413
-
Imagínese, queremos almacenar una lista ordenada de objetos.
413
+
Imagina que queremos almacenar una lista ordenada de objetos.
414
414
415
415
La elección natural sería una matriz:
416
416
@@ -513,7 +513,11 @@ El principal inconveniente es que no podemos acceder fácilmente a un elemento p
513
513
514
514
... Pero no siempre necesitamos tales operaciones. Por ejemplo, cuando necesitamos una cola o incluso un [deque](https://es.wikipedia.org/wiki/Cola_doblemente_terminada) -- la estructura ordenada que debe permitir agregar/eliminar elementos muy rápidamente desde ambos extremos.
515
515
516
-
A veces vale la pena agregar otra variable llamada `tail` (cola) para rastrear el último elemento de la lista (y actualizarlo al agregar/eliminar elementos del final). Para grandes conjuntos de elementos, la diferencia de velocidad frente a las matrices es enorme.
516
+
Las "listas" pueden ser mejoradas:
517
+
- Podemos agregar la propiedad `prev` (previo) junto a `next` (siguiente) para referenciar el elemento previo para mover hacia atrás fácilmente.
518
+
- Podemos también agregar una variable llamada `tail` (cola) referenciando el último elemento de la lista (y actualizarla cuando se agregan/remueven elementos del final).
519
+
-...La estructura de datos puede variar de acuerdo a nuestras necesidades.
520
+
517
521
518
522
## Resumen
519
523
@@ -534,4 +538,4 @@ Glosario:
534
538
535
539
Las funciones recursivas se pueden usar para recorrerlas como hemos visto en el ejemplo `sumSalary`.
536
540
537
-
Cualquier función recursiva puede reescribirse en una iterativa. Y eso a veces es necesario para optimizar las cosas. Pero para muchas tareas, una solución recursiva es lo suficientemente rápida y fácil de escribir y soportar.
541
+
Cualquier función recursiva puede reescribirse en una iterativa. Y eso a veces es necesario para optimizar las cosas. Pero para muchas tareas, una solución recursiva es lo suficientemente rápida y fácil de escribir y mantener.
0 commit comments