Necesitas distinguir una llamada de método, un parámetro y una referencia null; la sección anterior presenta ese modelo.
Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.
Ubícate antes de avanzar
Al terminar deberías poder relacionar Caso base y progreso con Pila de llamadas y resolver un caso nuevo.
Reserva entre 35 y 55 minutos para lectura, ejemplos, tres comprobaciones y cierre.
Instala un JDK actual y utiliza un editor o IDE con soporte para Java. Trabaja en un proyecto de laboratorio separado.
Abrir la guía de herramientas →Diagnóstico rápido: ¿cómo se relacionan Caso base y progreso y Pila de llamadas? +
No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.
Aprende el tema paso a paso
Aprenderás a diseñar recursión demostrando primero que termina y después siguiendo cada llamada en la pila.
- Toda recursión necesita un caso base y progreso
- La pila conserva el trabajo pendiente de cada llamada
- Arreglos y nodos requieren un estado explícito
Toda recursión necesita un caso base y progreso
Una función recursiva resuelve una instancia usando una más pequeña del mismo problema. El caso base responde directamente y cada llamada debe acercarse a él. El contrato también debe excluir o manejar entradas que no alcanzan ese caso; sin una medida que disminuya, la función puede no terminar.
Define qué significa el parámetro.
Escribe primero el caso más pequeño.
Demuestra que cada llamada reduce la medida.
¿Qué ocurriría si la llamada usara suma(n + 1)?
Mostrar respuesta +
Para una entrada positiva se alejaría del caso base y terminaría agotando la pila de llamadas.
La pila conserva el trabajo pendiente de cada llamada
Cada invocación crea un registro con parámetros, variables locales y punto de retorno. El trabajo anterior a la llamada ocurre al avanzar; el posterior ocurre cuando las llamadas retornan en orden inverso. Dibujar estos registros evita razonar por intuición.
Las llamadas se apilan.
El caso base inicia los retornos.
La última llamada pendiente termina primero.
¿Por qué la segunda impresión aparece en orden ascendente?
Mostrar respuesta +
Porque queda pendiente en cada registro y se ejecuta al desapilar las llamadas, desde la instancia más pequeña hacia la primera.
Arreglos y nodos requieren un estado explícito
En un arreglo suele pasarse un índice; en una lista enlazada, la referencia al nodo actual. Un método público valida la entrada y prepara ese estado, mientras un método privado realiza la recursión. Conviene preferir un ciclo cuando la profundidad puede crecer mucho sin aportar claridad.
El índice o nodo identifica el subproblema.
El método envolvente protege el contrato público.
La profundidad n consume O(n) memoria de pila.
¿Cuándo sería preferible un ciclo para recorrer la lista?
Mostrar respuesta +
Cuando la lista puede ser muy larga y la recursión no simplifica el razonamiento, porque el ciclo usa memoria auxiliar constante y evita desbordar la pila.
Tu recorrido en tres ideas
- Toda recursión necesita un caso base y progreso
- La pila conserva el trabajo pendiente de cada llamada
- Arreglos y nodos requieren un estado explícito
Comprueba que puedes usarlo
Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.
Escribir la llamada recursiva sin demostrar que se acerca al caso base.
Ignorar el consumo de pila para entradas largas.
Ahora hazlo sin guía
Implementa de forma recursiva el tamaño y la suma de una lista enlazada, y dibuja las llamadas para tres nodos.
Mostrar pauta de corrección +
- El caso null tiene resultado correcto.
- Cada llamada avanza al siguiente nodo.
- Compara tiempo y memoria con una versión iterativa.
