# Tema CS4: Sucesiones y recursión
(Ejercicios resueltos)

## Formas de generar una sucesión

Ejercicio 1.1. Definir la sucesión u[n] cuyo término general es
1-(-1/2)^n.

u[n]:=1-(-1/2)^n ;

Ejercicio 1.2. Calcular el término que ocupa la posición 20 de la sucesión
anterior.

u[20] ;

Ejercicio 1.3. Calcular el valor decimal del término anterior.

float(%);

Ejercicio 1.4. Calcular el límite de la sucesión u[n].

limit(u[n],n,inf);

Ejercicio 1.5. Definir, por recursión, la sucesión
   v[n] = 1,          si n = 0
        = v[n-1]/2+3, si n > 0.

v[0] :   1$
v[n] := v[n-1]/2+3$

Ejercicio 1.6. Calcular la lista de pares [k,v[k]] para k entre 0 y 9.

makelist([k,v[k]],k,0,9);

Ejercicio 1.6. Asignarle a la variable terminos como valor la lista de 
pares [k,v'[k]] para k entre 0 y 5, donde v'[k] es la expresión decimal 
de v[k].

terminos : makelist([k,float(v[k])],k,0,9);

Ejercicio 1.7. Dibujar los puntos de la lista terminos.

wxplot2d([discrete,terminos], [style, points],[xlabel,"n"],[ylabel,"v[n]"]);

Ejercicio 1.8. Calcular la lista de pares [k,v'[k]] para k entre 100 y 105,
donde v'[k] es la expresión decimal de v[k].

makelist([k,float(v[k])],k,100,105);

Ejercicio 1.9. Calcular el límite de la sucesión v.

limit(v[n],n,inf);

Nota. Maxima no calcula el límite de esta sucesión.

## Recurrencias

Ejercicio 2.1. Cargar el paquete solve_rec para resolver recurrencias.

load(solve_rec)$

Ejercicio 2.2. Resolver la ecuación recurrente w[n]=w[n-1]/2+3

solve_rec(w[n]=w[n-1]/2+3,w[n]);

ratsimp(%);

Ejercicio 2.2. Resolver la ecuación recurrente w[n]=w[n-1]/2+3 con la
condición inicial w[0]=1

solve_rec(w[n]=w[n-1]/2+3,w[n],w[0]=1);

ratsimp(%);

Ejercicio 2.3. Calcular w[2]

w[2];

Ejercicio 2.4. Definir la sucesión w[n] como la solución de
   w[n]=w[n-1]/2+3
   w[0]=1 

ratsimp(solve_rec(w[n]=w[n-1]/2+3,w[n],w[0]=1));

define(w[n],rhs(%));

Ejercicio 2.5. Calcular w[2].

w[2];

Ejercicio 2.6. Calcular el desarrollo de w[n].

expand(w[n]);

Ejercicio 2.7. Borra el valor de la variable u.

kill(u)$

Ejercicio 2.8. Resolver las ecuaciones que definen la sucesión de Fibonacci
   u[0]  =0,
   u[1]  =1,
   u[n+2]=u[n+1]+u[n]

solve_rec(u[n+2]=u[n+1]+u[n],u[n],u[0]=0,u[1]=1);

Ejercicio 2.9. Definir la sucesión uC como la forma cerrada de la
sucesión de Fibonacci.

define(uC[n],rhs(%));

Ejercicio 2.10. Calcular el décimo término de la sucesión de Fibonacci
usando su forma cerrada.

uC[10];

ratsimp(%);

## Representación gráfica de uns sucesión

Ejercicio 3.1. Asignarle a la variable puntos la lista de los puntos 
correspondientes a los 9 primeros puntos de la sucesión de Fibonacci
calculados con la forma cerrada.

puntos : makelist([k,ratsimp(uC[k])],k,0,8);

Ejercicio 3.2. Representar gráficamente los puntos correspondientes a los 
9 primeros puntos de la sucesión de Fibonacci calculados con la forma 
cerrada.

wxplot2d([discrete,puntos],[x,0,9],[style,points]);

## Sucesiones definidas por sumatorios

Ejercicio 4.1. Calcular la suma de los cuadrados de los n primeros números

sum(k^2,k,1,n);

Ejercicio 4.2. Cargar el paquete simplify_sum.

load(simplify_sum) $

Ejercicio 4.3. Calcular la suma de los cuadrados de los n primeros números

'sum(k^2,k,1,n)=simplify_sum(sum(k^2,k,1,n));

Ejercicio 4.4. Descomponer en factores la suma anterior.

factor(%);

Ejercicio 4.5. Calcular la suma de la serie de término 1/k^2.

'limit(sum(1/k^2,k,1,n),n,inf) = simplify_sum(sum(1/k^2,k,1,inf));

Ejercicio 4.6. Calcular la suma de 1 a n de k*binomial(n,k).

'sum(k*binomial(n,k),k,1,n) = simplify_sum(sum(k*binomial(n,k),k,1,n));

## Productos y factoriales

Ejercicio 5.1. Calcular el producto de los cuadrados de los 5 primeros
números.

product(k^2,k,1,5);

Ejercicio 5.2. Definir la sucesión q[n] cuyo término n-ésimo es
binomial(2*n,n)/4^n

q[n] := binomial(2*n,n)/4^n;

Ejercicio 5.2. Expresar q[n] mediante factoriales.

makefact(q[n]);

Ejercicio 5.2. Expresar q[n+1]/q[n] mediante factoriales.

q[n+1]/q[n];

makefact(%);

Ejercicio 5.3. Simplificar los factoriales de la expresión anterior.

minfactorial(%);

Ejercicio 5.4. Simplificar la expresión anterior.

ratsimp(%);

## Sucesiones del tipo u[n+1]=f(u[n])

Ejecicio 6.1. Definir la función f como la función coseno.

f(x):=cos(x);

Ejercicio 6.2. Redefinir la sucesión u por recurrencia:
   u[n] = 1.5,         si n=0
        = f(u[n-1]),   si n>0    

kill(u)$ 
u[0] :   1.5$
u[n] := f(u[n-1])$

Ejercicio 6.3. Definir la lista L1 de los puntos (u[k],u[k+1]) y la lista
L2 de los puntos (u[k+1],u[k+1]) para k entre 0 y 10.

L1:makelist([u[k],u[k+1]],k,0,10)$ 
L2:makelist([u[k+1],u[k+1]],k,0,10)$

Ejercicio 6.4. Definir L como la lista obtenida intercalando los puntos de
L1 y L2; es decir, L es [L1[1],L2[1],L1[2],L2[2],L1[3],L2[3],...]

L : join(L1,L2)$

Ejercicio 6.5. Dibujar, sobre una misma gráfica, la función f, la función 
y=x y los puntos de la lista L.  

wxplot2d([f(x),x,[discrete,L]], [x,0,%pi/2], [y,0,1.2],
[style, [lines,2,1], [lines,1,2], [linespoints,1,1,3,1]],
[gnuplot_preamble, "set grid"],
[legend, "y=f(x)", "y=x", "sucesión u"])$

Fin.