Ejercicio 8

Ejercicio 8

de Rafael Agustin Castelli Ottati -
Número de respuestas: 2

Hola, intente resolver el ejercicio 8 , pero mientras traducia las ecuaciones a C me quedo la duda de como asegurar que la funcion que estaba definiendo era efectivamente una funcion. O sea como me aseguro la terminacion, no superposicion y exhaustividad , porque tengo 2 parametros sobre los que estoy aplicando la recursion. Con esto me quedo tambien la duda cual de los esquemas de recursion estoy usando.

Ademas trate de hacer la funcion usando solo recursion en m, pero no pude. Hay alguna forma de llevar la funcion a una recursion solo en m?

Dejo el codigo por si es necesario:

// Precond : m >= n >= 0
// Postcond : Combinaciones de m tomadas de  n
uint combinaciones(uint m, uint n) {
//     Casos Base:
    if (n == 0) return 1;
    else if (n == 1) return m;
    else if (n == m)  return 1;
//     Casos Inductivos:
    else return combinaciones(m - 1,n) + combinaciones(m - 1, n - 1);
}

En respuesta a Rafael Agustin Castelli Ottati

Re: Ejercicio 8

de Carlos Luna -

Hola Rafael.

Este es un caso de recursión general, en el cual se cumplen las tres condiciones suficientes para asegurar que la función está bien definida:

Exhaustividad: se cumple ya que al final hay un else. En consecuencia, todo par de números que no cumplió los casos previos entra acá.

No superposición: se cumple trivialmente, ya que la evaluación secuencial de casos y de arriba hacia abajo hace que se ingrese en el primero que se cumple (if.. else if...)

Terminación: Se cumple ya que m >= n >= 0 y en ambos llamados recursivos se decrementa m. Luego, termina cuando n es igual a m o n es 1 (ya que en un caso se decrementa n también).  

Saludos, Carlos