Foro de elhacker.net

Programación => Java => Mensaje iniciado por: jkaszr en 20 Abril 2017, 01:47 am



Título: ayuda.funcion recursiva
Publicado por: jkaszr en 20 Abril 2017, 01:47 am
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
  1. int numero=1;
  2.       int cont=1;  
  3.        while(cont<6){      
  4.        numero=numero*(numero+1);    
  5.        cont++;      
  6.        }    
  7.        System.out.println(numero);


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: ayuda.funcion recursiva
Publicado por: Serapis en 21 Abril 2017, 01:08 am
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:
Código:
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...

Código:
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