ayuda.funcion recursiva

Iniciado por jkaszr, 20 Abril 2017, 01:47 AM

0 Miembros y 1 Visitante están viendo este tema.

jkaszr

tengo esta serie: 1, 2, 6, 42, 1806,y necesito hallar el valor qeu sigue, lo hize de esta forma, ahora necesito hacerlo con una funcion recursiva pero no se como.
 
Código (java) [Seleccionar]
int numero=1;
      int cont=1;  
       while(cont<6){      
       numero=numero*(numero+1);    
       cont++;      
       }    
       System.out.println(numero);



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

Serapis

#1
La recursividad consiste en una función que se llama a sí misma y que tiene determinadas premisas:

- La primera llamada siempre es desde fuera.
- Debe tener un punto de detención, una condición que una vez cumplida finalice la recursión.
- Para que sea útil (y no solo se reinvoque sin ton ni son), algunas variables deben estar disponibles entre llamadas y otras podrían ser temporales (no sobreviven al salir de la  función).

Si primero creamos una solución para la serie (fíjate que yo propongo otra solución distinta a la tuya (la que tu pones es más sencilla), solo con el propósito de que veas que a veces hay más de una solución):

Usamos Array() como contenedor de la serie, y k como el contador de iteración.
Lo primero es inicializar el primer valor de la serie:
Array(0)=1
Bucle para k desde 1 a 5
  Array(k) = Array(k-1)² + Array(k-1)
  imprimir Array(k)
fin bucle


Ahora para ser recursivo, lo que hace el bucle en cada ciclo, debe hacerse en cada llamada a la función, por tanto las variables que deben 'sobrevivir' entre llamadas son el valor (n) y k, de paso los metemos también en el array... fíjate que se podría ignorar 'n' como tal y operar siempre sólo con el valor dle array pasando donde convenga Array(k-1), etc...

Se hace la primera llamada:
llamar a SerieConRecursion(1,0)

funcion SerieConRecursion(n, k)
   array(k)=n
   n = (n² + n)
   k = (k + 1)
   si (k < 5) luego
       llamar SerieConRecursion(n, k)
   en otro caso
       array(k)=n  <--- esta línea solo se ejecutará una vez
   fin si
fin funcion