elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funcion recursiva
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funcion recursiva  (Leído 2,363 veces)
Kinamox

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Funcion recursiva
« en: 7 Abril 2018, 02:25 am »

Buenas, alguien de buen corazón podría darme una idea de como hacer esta funcion recursiva:

An = 2An-1 + 3
A0 = 1

[las que no son negritas son sub-indice]

que corresponde a la sucesión {1,5,13,29,61..}.

por favor, necesito hacer el codigo y no encuentro donde basarme.Les agradezco
saludos.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Funcion recursiva
« Respuesta #1 en: 7 Abril 2018, 03:32 am »

Código:
entero = funcion Recursion(entero Valor, byte veces, byte MaxVeces)
    Veces +=1

    Si (veces < MaxVeces)
        valor = ((2 * (valor -1))  + 3)
        devolver Recursion(valor, veces, maxveces)
    fin si

    devolver valor
fin funcion

p.d.: se me escapó el mensaje sin los comentarios pertinentes:

Efectivamente valor inicialmente podría ser 1, como señalas en A0=1 (nunca 0).
el subíndice 'n', sería 'veces' y MaxVeces, es limitar la recursion a un numero 'n' dado.
...es fácil transformarlo en que veces sea maxveces y acabe cuando llegue a 0, en ese caso decrementando veces... haciendo así innecesario el parámetro 'maxVeces'.

Te invito a hacer esa ligera modificación... una vez entiendas su funcinamiento.

p.d. 2:
Notas que (iterando) la serie puedes resumirla así mejor:
Código:
v0 = 2
n0 = 1
veces = ?  // un número que tu mismo pongas...

bucle para k desde 1 a veces  //el ciclo 0, tiene los valores asignados antes del bucle.
    v = 2v
    n =  (n + v)
siguiente en bucle

Así 'v' va tomando valores: 2, 4, 8, 16,  32 ...
Mientras 'n' toma valores: 1, 1+4, 5+8, 13+16, 29+32...


« Última modificación: 7 Abril 2018, 03:49 am por NEBIRE » En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Funcion recursiva
« Respuesta #2 en: 8 Abril 2018, 11:50 am »

La programación recursiva... un tema apasionante.

Su origen es anterior a la programación iterativa y, en algunos contextos, se suele referir a ella como una modalidad de programación declarativa. ¿por qué? Porque...

¡ es más sencilla !

Consiste en declarar, no en programar, la expresión que deseas ( Esta sutil distinción se aprecia con la experiencia...).



An = 2An-1 + 3
A0 = 1


 Fíjate que es prácticamente lo mismo que en la expresión matemática.... No hay "variables" (salvo el parámetro), no hay asignaciones, no hay bucles... Casi parece matemáticas y no computación...

Código:
  fun A(in int n) dev int
  {
     case n==0 : dev 1
     case n> 0 : dev 2*A(n-1) + 3
  }

La transcripción a lenguaje como C puede quedar:



Código
  1. #include <stdio.h>
  2.  
  3. unsigned int A(const unsigned int n)
  4. {
  5.  if (n==0) return 1;
  6.  if (n>0) return (2*A(n-1) + 3);
  7. }
  8.  
  9. #define MAXIMUM 20
  10.  
  11. int main(int argc, char *args[])
  12. {
  13.  unsigned int n;
  14.  for( n=0; n<MAXIMUM ; n++)
  15.    printf("A\(%2u\) : %8u\n",n,A(n));
  16. }

La salida da lo siguiente:
Código:
A( 0) :        1
A( 1) :        5
A( 2) :       13
A( 3) :       29
A( 4) :       61
A( 5) :      125
A( 6) :      253
A( 7) :      509
A( 8) :     1021
A( 9) :     2045
A(10) :     4093
A(11) :     8189
A(12) :    16381
A(13) :    32765
A(14) :    65533
A(15) :   131069
A(16) :   262141
A(17) :   524285
A(18) :  1048573
A(19) :  2097149


Si quieres una versión más "C-flavour"/NINJA puedes hacer:

Código
  1. unsigned int A(const unsigned int n)
  2. {
  3.  return n?(2*A(n-1)+3):1 ;
  4. }

Cuidadito que el paso de mates a C no es gratis... Más allá de A=29, la función desborda los valores de unsigned int....







« Última modificación: 8 Abril 2018, 12:01 pm por dijsktra » En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Función recursiva de búsqueda.
Programación C/C++
APOKLIPTICO 1 2,827 Último mensaje 4 Junio 2010, 21:51 pm
por [D4N93R]
Funcion recursiva
Programación C/C++
Albertocn 9 3,912 Último mensaje 19 Febrero 2014, 19:50 pm
por leosansan
Función recursiva en C++
Programación C/C++
david2015 4 2,740 Último mensaje 22 Mayo 2015, 03:14 am
por Gunhack
duda función recursiva
Programación C/C++
fernaEDLP 4 1,982 Último mensaje 30 Mayo 2019, 20:55 pm
por fernaEDLP
Problema con funcion palindroma en forma recursiva
Programación C/C++
palacio29 1 1,832 Último mensaje 12 Junio 2019, 04:07 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines