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)
| | |-+  Problema de entendimiento recursividad.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de entendimiento recursividad.  (Leído 5,064 veces)
axeelcs

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Problema de entendimiento recursividad.
« en: 20 Agosto 2011, 19:46 pm »

Tengo este ejercicio .
Planteamiento Ejercicio 5: Programar un algoritmo recursivo que permita sumar los dígitos de un número.Ejemplo: Entrada:123 Resultado:6

Y el código es así :

int sumar(int n)
{
if (n == 0) {
return n;
}

else {
return sumar(n/10) + (n%10);
}
}


Pero no lo entiendo, no logro entender .

alguién me lo podría explicar por favor ?
ej=126.
me refiero, a que lo primero que hace es (126/10)+(126%10) = 12 + 6 .
y ahora lo vuelvo a hacer ? , hasta qe n== 0.. pero cual de los dos vuelve a hacer .
agradecería si me aclaran el tema.
saludos .


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema de entendimiento recursividad.
« Respuesta #1 en: 20 Agosto 2011, 19:58 pm »

.
Código
  1. #include <stdio.h>
  2.  
  3. int sumar(int n) {
  4.    if (!n)
  5.        return n;
  6.    return sumar(n / 10) + (n % 10);
  7. }
  8. int main()
  9. {
  10.    printf("%d\n", sumar(126));
  11.    getchar();
  12.    return 0;
  13. }
  14.  
  15.  

n = 126
sumar(n/10) + (n % 10) --> recursivamente....hasta n = 0... es decir:

-->sumar( 126 ) //llamada...

//Se aplica la teoria de la pila (el ultimo el el primero en salir) asi que...
0   <-- segun el algoritmo anterior ya no se ejecuta sumar.
sumar( 0 ) + 1
sumar( 1 ) + 2
sumar( 12 ) + 6
//Se leen las llamadas de abajo hacia arriba... donde el de arriba {0} es el caso de termino.

Por lo tanto:

((((0) + 1) + 2) + 6) = 9

Dulces Lunas!¡.


« Última modificación: 20 Agosto 2011, 20:49 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Darkgold9

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Problema de entendimiento recursividad.
« Respuesta #2 en: 20 Agosto 2011, 20:07 pm »

La recursividad se basa en llamar a una funcion "recursivamente", es decir llamar a una funcion asi misma hasta llegar a lo que se suele llamar caso Base, que en tu caso seria la parte:

Código:
if (n == 0) {
return n;
}

Una vez aqui la funcion "deja de llamarse asi misma" o "llega a la base", y vuelve hacia atras reconstruyendo el algoritmo con los valores que te han puesto en el post de arriba:

Citar
sumar( 126 )
//Se aplica la teoria de la pila (el ultimo el el primero en salir) asi que...
1
sumar( 1 ) + 2
sumar( 12 ) + 6

Basicamente la recursividad se resume en dos puntos:

1- Caso base. (Entiendelo como el caso en el que para y deja de llamarse asi mismo, dicho en plan chapuza  :xD)
2- Caso recursivo. (Esta es la parte en la que el algoritmo se llama asi mismo una y otra vez hasta llegar al caso base)

Hay varios tipos de recursividad pero todas siguen ese esquema.

Saludos!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema de entendimiento recursividad.
« Respuesta #3 en: 20 Agosto 2011, 20:17 pm »


1- Caso base. (Entiendelo como el caso en el que para y deja de llamarse asi mismo, dicho en plan chapuza  :xD)
2- Caso recursivo. (Esta es la parte en la que el algoritmo se llama asi mismo una y otra vez hasta llegar al caso base)


Caso base = llamada inicial (por algo se llama base )... por ende si fuera este el caso base el caso de termino, no seria recursivo. La recursividad termina hasta un Caso de termino. Una vez llegado al caso Termino se retornando TODO al caso Base aplicando la teoria de la PILA ( El ultimo es el primero en salir ). quizas esto era lo que querias decir realmente.

https://secure.wikimedia.org/wikipedia/es/wiki/Pila_%28inform%C3%A1tica%29
http://www.lcc.uma.es/~lopez/modular/recursion/transp_recursion.pdf
https://secure.wikimedia.org/wikipedia/es/wiki/Recursi%C3%B3n
https://secure.wikimedia.org/wikipedia/es/wiki/Algoritmo_recursivo

Por otro lado solo hay dos tipos de recursividad:

* Directa
* Indirecta

en los enlaces esta la explicacion.

Es como en algebra, debes empezar a resolver los parentesis mas internos... hasta dar con el resultado final.

Dulces Lunas!¡.
« Última modificación: 20 Agosto 2011, 20:31 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
axeelcs

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: Problema de entendimiento recursividad.
« Respuesta #4 en: 20 Agosto 2011, 20:37 pm »

Muchisimas gracias a ambos !;
me quedo clarísimo :)
se los agradezco en serio .
En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Problema de entendimiento recursividad.
« Respuesta #5 en: 20 Agosto 2011, 20:44 pm »

Caso base = llamada inicial (por algo se llama base )...
Perdon que me meta pero esto no es cierto, Caso Base es el caso terminal donde no se hace ninguna llamada recursiva. Inclusive lo dice en una de las paginas que mencionas...

PD: Y por curiosidad, que es eso de Dulces Lunas, Temibles Lunas ?
En línea

Darkgold9

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Problema de entendimiento recursividad.
« Respuesta #6 en: 20 Agosto 2011, 20:55 pm »

Citar
Caso base = llamada inicial (por algo se llama base )... por ende si fuera este el caso base el caso de termino, no seria recursivo. La recursividad termina hasta un Caso de termino. Una vez llegado al caso Termino se retornando TODO al caso Base aplicando la teoria de la PILA ( El ultimo es el primero en salir ). quizas esto era lo que querias decir realmente.

No he oido nunca hablar del "caso de termino", pero no lo pongo en duda, para mi el caso base es cuando el algoritmo para y empieza a resolverse (parecido a backtracking volviendo hacia atras...), supongo que queremos expresar lo mismo pero cada uno con distintos terminos.

Y en cuanto a los tipos de recursividad ami me enseñaron uno mas que era la recursividad Multiple aparte de los que citaste.

Saludos!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema de entendimiento recursividad.
« Respuesta #7 en: 20 Agosto 2011, 21:34 pm »

.
Yo lo conozco el caso Base como caso de termino. donde el stack deja de aumentar y se empiesan a retornar los resultados (Similar al BackTracking pero la recursividad esta mas ligada al Stack).

Igual y es un error de terminos.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema de recursividad
Java
lexoazul 6 4,675 Último mensaje 8 Febrero 2010, 22:31 pm
por lexoazul
problema de recursividad????
Java
optimus1007 1 2,633 Último mensaje 18 Marzo 2010, 17:46 pm
por Castiblanco
[C] - Recursividad problema « 1 2 »
Programación C/C++
cbug 10 6,738 Último mensaje 4 Julio 2010, 18:39 pm
por cbug
Entendimiento del protocolo ICSP de Microchip
Electrónica
Yeison.Eng 0 5,068 Último mensaje 23 Mayo 2011, 11:15 am
por Yeison.Eng
Problema con recursividad y buscaminas.
Programación C/C++
miguel0542 1 3,763 Último mensaje 5 Junio 2016, 23:49 pm
por do-while
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines