introalg:taller08_3
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| introalg:taller08_3 [2008/03/18 18:22] – creado laura | introalg:taller08_3 [2025/11/15 13:47] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 26: | Línea 26: | ||
| En esta función, si //n// es negativo, se corta la recursividad, | En esta función, si //n// es negativo, se corta la recursividad, | ||
| + | |||
| + | Entonces, los programas recursivos tienen que cumplir dos requisitos: | ||
| + | - tratar un número indeterminado de elementos (como en la inducción matemática) | ||
| + | - terminar en algún momento (a diferencia de la inducción matemática) | ||
| + | |||
| + | Para garantizar que se cumplen estos dos requisitos, los programas o funciones recursivos tienen que tener las siguientes tres propiedades: | ||
| + | - la función se llama a sí misma por lo menos en uno de los casos de su definición (caso(s) recursivo o inductivo), | ||
| + | - la función NO se llama a sí misma por lo menos en uno de los casos de su definición (caso(s) base), y | ||
| + | - la condición de aplicación del caso recursivo se modifica cada vez que se aplica éste, de forma que eventualmente no se cumple más la condición y se llega al caso base. | ||
| + | |||
| + | El primer requisito garantiza que la función puede tratar un número indeterminado de elementos, mientras que los dos siguientes requisitos garantizan que la función va a terminar en algún momento. | ||
| Línea 113: | Línea 124: | ||
| Veamos ahora otro ejemplo, con la función // | Veamos ahora otro ejemplo, con la función // | ||
| - | Veamos varias formas en que la función estaría **MAL** definida: | + | Recordemos los requisitos básicos de las funciones recursivas: |
| + | - la función se llama a sí misma por lo menos en uno de los casos de su definición (caso(s) recursivo o inductivo), | ||
| + | - la función NO se llama a sí misma por lo menos en uno de los casos de su definición (caso(s) base), y | ||
| + | - la condición de aplicación del caso recursivo se modifica cada vez que se aplica éste, de forma que eventualmente no se cumple más la condición y se llega al caso base. | ||
| + | |||
| + | Veamos varias formas en que la función estaría **MAL** definida, porque se incumplen alguno de los requisitos anteriores: | ||
| < | < | ||
| Línea 132: | Línea 148: | ||
| [20,20,30] | [20,20,30] | ||
| - | En este caso, la función **no se llama a sí misma**, así que sólo se aplicaría a la cabeza de la lista, y no a todo el resto. | + | En este caso, la función **no se llama a sí misma**, así que sólo se aplicaría a la cabeza de la lista, y no a todo el resto. |
| - | Corregimos este error. | + | |
| < | < | ||
| Línea 148: | Línea 163: | ||
| [20, | [20, | ||
| - | En este caso, el caso recursivo no modifica su condición de aplicación, | + | En este caso, el caso recursivo no modifica su condición de aplicación, |
| La función // | La función // | ||
introalg/taller08_3.1205875358.txt.gz · Última modificación: (editor externo)
