• Viernes 29 de Marzo de 2024, 08:24

Autor Tema:  Ayuda Con La Recursividad  (Leído 4350 veces)

Mr. Pascal

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Ayuda Con La Recursividad
« en: Jueves 26 de Octubre de 2006, 18:46 »
0
Bueno colegas programadores, estoy teniendo problemas con la recursividad, es decir, aun no logro comprenderla, se me hace un poco dificil encontral el estado base para empezar a trabajar en un ejercicio...

si alguno de uds. tuviera algunos manuales, ejemplos, o algo que  me ayudara a desarrollar bien la recursividad se lo agradeceria.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Ayuda Con La Recursividad
« Respuesta #1 en: Jueves 26 de Octubre de 2006, 19:02 »
0
Buscando en google y el primer link que me trajo  :whistling: ...

... apareció esto;

Ejemplo de recursividad

"Google", que buen buscador, no?  :devil:

 :hola:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Ayuda Con La Recursividad
« Respuesta #2 en: Jueves 26 de Octubre de 2006, 22:12 »
0
para empezar el link que te paso Angel_K_ido esta excelente, con ese ejemplo puedes empezar muy bien.

Trata de convertir en forma recursiva  todos tus programas que anteriormente hubieras echo, como por ejemplo:
CantidadDigitos(NUMERO: integer)
Suma_de_digitos(NUMERO: integer)
Suma_de_digitos_pares(NUMERO: integer)
Cant_de_digitos_pares(int NUMERO: integer)
.......

Eso para practicar.

Te ayudo con la primera
Código: Text
  1.  
  2. byte TForm1::CantidadDigitos ( Cardinal num ){
  3. byte count&#59;
  4.       if (num < 10){
  5.            count = 1;
  6.       }
  7.       else
  8.       {
  9.            num = num / 10;
  10.            count = CantidadDigitos (num);
  11.            count++;
  12.        }
  13.        return count;
  14. }
  15.  
  16.  

Explicacion.
Por que escojo if (num < 10) , como caso base ??.
R. Por que si num es menor a 10 significa que esta entre 0..9, lo cual significa que tiene 1 digito.

Si tienes problemas, vuelve a preguntar.

Espero y te sirva.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Ayuda Con La Recursividad
« Respuesta #3 en: Jueves 26 de Octubre de 2006, 22:15 »
0
Ah, disculpa.

Mi ejemplo esta echo en C++, pero la logica es igual.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Mr. Pascal

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Ayuda Con La Recursividad
« Respuesta #4 en: Sábado 28 de Octubre de 2006, 06:29 »
0
Muchas gracias por el link Angel_k_ido me ha servido de mucho...
ahora si estoy empezando a comprender un poco mas esto de la recursividad....

Y que buen consejo de pasar mis programas a recursivos Lencho, tienes razón asi voy practicando un poco mas...

les voy a enseñar los ejercicios que me dejaron hacer en la facultad.

1.-hacer una funcion recursiva que contabilice todos los numeros pares de un arreglo.                        
2.-hacer un procedimiento que visualice una frase de manera invertida.

Aqui estan los codes que hice por si a alguien le intereza.
ya estan corridos.

Código: Text
  1.  
  2.  
  3. function cont (c, i : integer): integer;
  4. begin
  5.    if i = 0 then
  6.       cont:= c
  7.    else
  8.       if num[i] mod 2 &#60;&#62; 0 then
  9.           cont:= cont(c+1, i-1)
  10.       else
  11.            cont:=cont(c, i-1);
  12. end;
  13.  
  14.  
  15.  

Código: Text
  1.  
  2. procedure impinv(i:integer; fr:str); &#60;--i entra con la longitud de la frase
  3. begin
  4.    if i &#62;= 1 then
  5.        begin
  6.            write(fr[i]);
  7.             impinv(i-1, fr)
  8.        end;
  9. end;
  10.  
  11.  

 :rolleyes: Si alguien tiene una variante de cualquiera de ellos me gustaria verla para estudiarla  y asi aprender mas.

 :comp: Sigo trabajando en la Recursividad... y agradesco la ayuda brindada por los dos caballeros... :hola:

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Ayuda Con La Recursividad
« Respuesta #5 en: Sábado 28 de Octubre de 2006, 15:03 »
0
tu codigo no esta bien explicau.
No se sabe si quisiste hacer Contar la cantidad de numeros pares en un vector o Sumar todos los digitos pares de un vector.
pero weno, sigue practicando.

aqui esta el Sumar todos los digitos pares de un vector en Visual Basic.

Código: Text
  1.  
  2.    Private Function SumaPares(ByVal vec() As Integer, ByVal j As Integer) As Integer
  3.         Dim suma As Integer
  4.         If j = 0 Then
  5.             If (vec(j) Mod 2 = 0) Then
  6.                 suma = vec(j)
  7.             Else
  8.                 suma = 0
  9.             End If
  10.         Else
  11.             suma = SumaPares(vec, j - 1)
  12.             If (vec(j) Mod 2 = 0) Then
  13.                 suma = suma + vec(j)
  14.             Else
  15.                 suma = suma
  16.             End If
  17.         End If
  18.         Return suma
  19.     End Function
  20.  
  21.  

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Ayuda Con La Recursividad
« Respuesta #6 en: Sábado 28 de Octubre de 2006, 15:12 »
0
la logica es la siguiente.

por el caso base., me llega un vector con una sola casilla, verifico si es par devulevo el mismo dato, si no devuelvo 0.
por ELSE, llamo a la funcion recursiva pero enviandole DIMENSION -1 , para que no tome en cuenta la ultima casilla. Cuando termine yo verifico la ultima casilla. Si es par le sumo a lo que me devolvio la funcion recursiva y si no devuevlo lo que me devolvieron a mi.


Espero y te sirva.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Mr. Pascal

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Ayuda Con La Recursividad
« Respuesta #7 en: Sábado 28 de Octubre de 2006, 18:23 »
0
:) Es cierto Lencho ahora que lo veo bien no esta bien explicado, pero lo funcion lo que hace es contabilizar la cantidad de numeros pares que hay en un vector (array)

explicacion:

La funcion recibe como parametros a la variable c que es un contandor inicializado en 0 en el programa principal y tambien recibe a la variable i que es  el indice del vector (array) y entra en la funcion con el tamaño del vector. (por ejemplo si el vector tiene 5 casillas i entraria con 5).
Ahora por que escogi                        
                           if i=0 then
                                        cont:= c      por que al ir comparando si el numero que esta en el vector es impar va ir decrementando i y cada comparacion la va almacenando en el stack  de pascal y el elemento cima del stack seria cont(c, 0), donde c seria la cantidad de impares total.

dejo el programa adjunto para que lo vean
 :hola:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.