3Eva_IT2006_T1 Ackerman recursiva

3ra Evaluación I Término 2006-2007, Septiembre 12, 2006 /ICM00794

Tema 1. (20puntos) Debido a su definición, profundamente recursiva, la función de Ackermann se utiliza con frecuencia para comparar compiladores en cuanto a su habilidad para optimizar la recursión. Dicha función se define a continuación:

Ackerman ecuacion

a) Realice una función ackerman(m, n) en matlab, que encuentre el resultado de Ackerman para n y m dados.

b) Realice la prueba de escritorio para ackerman(1, 2).

3Eva_IT2004_T3 Multiplicar con campesino egipcio

Mejoramiento I Término 2004 – 2005. Agosto 31, 2004 /ICM00794

Tema3. Para efectuar la multiplicación entre 2 números enteros p y q, se puede utilizar un método recursivo denominado el Campesino Egipcio:

mult(p,q) = \begin {cases} 0 , && q=0 \\ p ,&& q=1 \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big) , && q\ge 2 \text {, q es par} \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big)+p , && q\ge 2 \text{, q es impar }\end{cases}

a) Escriba la función recursiva mult(p,q) en C/C++ que reciba dos argumentos enteros p y q, y devuelva el resultado de su multiplicación.

b) Escriba un programa en C/C++ que, pida al usuario un número entre 0 y 12 y muestre la tabla de multiplicar de dicho número, utilizando la función anterior.

Rúbrica: función recursiva (8 puntos), validar número para tabla (4 puntos), tabla de multiplicar con función recursiva (4 puntos), salida ordenada (4 puntos)


Referencia:  Matemática egipcia. https://es.wikipedia.org/wiki/Matem%C3%A1tica_egipcia

Multiplicación por duplicación. https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_por_duplicaci%C3%B3n

2Eva_IIIT2003_T2 Raíz cuadrada por Newton, recursiva

Final III Término 2003 – 2004. Abril 23, 2004 /ICM00794

Tema 2. La raíz cuadrada de un número real x mayor que 0 se puede obtener a través de una aproximación n-ésima de una función f según el método de Newton, el cual establece lo mostrado:

f(1) = \frac{x}{2} f(2) = 0.5\Bigg(f(1) + \frac{x}{f(1)}\Bigg) f(3) = 0.5\Bigg(f(2) + \frac{x}{f(2)}\Bigg)

f(n) = 0.5\Bigg(f(n-1) + \frac{x}{f(n-1)}\Bigg)

a) Escriba una función recursiva f que reciba dos parámetros:

  • x (el número del cual se desea calcular la raíz cuadrada) y
  • n (el número de aproximaciones).

Esta función debe retornar la raíz cuadrada de x para la n-ésima aproximación.

b) Escriba un programa que permita el ingreso de un número real x y que, mediante sucesivas llamadas a la función f, muestre los resultados del cálculo de la raíz cuadrada de dicho número para cada una de las 10 primeras aproximaciones (n = 1, 2, 3, .. , 10).

Nota: considere aplicar una bandera como indicador que la raiz no es posible para números negativos o cero. Tampoco es posible para n menores que 1

Referencia: https://es.wikipedia.org/wiki/Ra%C3%ADz_cuadrada


Ejemplo:

ingrese x: 9
aproximación n-esima: 10
 i , f(i)
0 nan
1 4.5
2 3.25
3 3.0096153846153846
4 3.000015360039322
5 3.0000000000393214
6 3.0
7 3.0
8 3.0
9 3.0
10 3.0
>>> 

2Eva_IIT2003_T3 Funciones eudoxus recursivas

Final II Término 2003 – 2004. Febrero 10, 2004 /ICM00794

Tema 3. Los números de Eudoxus se definen mediante la siguiente formulación:

{x[0] = 1
{x[i] = y[i] + y[i-1] , i>=1

{y[0] = 0
{y[i] = x[i-1] + y[i-1] , i>=1

a) Escriba las funciones recursivas eudoxusX(i) y eudoxusY(i) que permitan generar cada par ordenado(xi, yi).

b) Adicionalmente escriba un programa de prueba que, utilizando las funciones anteriores, muestre los pares ordenados generados recursivamente para 0≤in, donde n es un valor entero leído previamente.

2Eva_IT2003_T2 Función recursiva f(n)

Final I Término 2003 – 2004. Septiembre 02, 2003 /ICM00794

Tema 2. (25 puntos) Escriba una función recursiva f en C/C++ tal que:

f(n) ={1/2, si n=0 ó n=1
      {1/2*[f(n-1) + f(n-2)], si n es impar mayor que 1
      {1/2*[f(n-1) - f(n-2)], si n es par mayor que 1

Escriba un programa en C/C++ que determine el mayor valor de la función f para n=0, 1, 2, 3, 4, 5

2Eva_IIT2001_T3 Flujo de ahorro para n años

Final II Término 2001 – 2003. Febrero 5, 2002 /ICM00794

Tema 3.

El flujo de efectivo Fk se evalúa recursivamente considerando el flujo neto anterior Fk-1 y las tasas i1, i2 tal como se indican en la fórmula.

F_k = \begin{cases} (1 + i_1)F_{k-1}+C_k, && F_{k-1} \ge 0, k>0 \\(1 + i_2)F_{k-1}+C_k,&& F_{k-1} \lt 0, k \gt 0 \\ 0 ,&& k=0 \end{cases}

En la fórmula, C representa un arreglo de los valores del flujo para n años que operan en un determinado negocio (los valores negativos indican desembolsos)

Ejemplo:
C0 C1 C2 C3 C4 Cn
-500 300 600 -200 300 -200 -300 350

a) Escriba una función recursiva para poder utilizar FK.

b) Escriba un programa principal que lea i1, i2, y el arreglo Ck, de n elementos y llame a la función anterior para calcular FK.

c) Posteriormente, en el mismo programa asigne a i1, el valor de 0.1 y pida por teclado dos valores para i2. Evalúe FK para los casos e identifique si hubo un cambio de signo.

Nota: Considere las variables float C[20], i1, i2 como globales.