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 21:22] – creado laura | introalg:taller08_3 [2018/08/10 03:03] (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: 2018/08/10 03:03 (editor externo)