Autor
|
Tema: ¿Por que se imprime el arreglo al revez? [C] (Leído 2,776 veces)
|
UsuarioZ
Desconectado
Mensajes: 64
|
Empieza a imprimir por el ultimo elemento (37). #include <stdio.h> #define SIZE 10 void someFunction(int [], int); main() { int a[SIZE] = {32, 27, 64, 18, 95, 14, 90, 70, 60 ,37}; printf("Los valores en el arreglo son: "); someFunction(a, SIZE); return 0; } void someFunction(int b[], int size) { if(size > 0) { someFunction(&b[1], size - 1); } }
Salida: Los valores en el arreglo son: 37 60 70 90 14 95 18 64 27 32
|
|
« Última modificación: 6 Enero 2020, 01:08 am por UsuarioZ »
|
En línea
|
|
|
|
K-YreX
|
Eso es porque primero tienes la llamada recursiva y después la instrucción de mostrar. Lo que hace tu programa es: Llamar a mostrar desde la posicion 0 Llamar a mostrar desde la posicion 1 Llamar a mostrar desde la posicion 2 Llamar a mostrar desde la posicion 3 //... Llamar a mostrar desde la posicion SIZE-1 // AQUI ACABA LA RECURSIVIDAD Y AHORA EMPIEZA A MOSTRAR DESDE DENTRO HACIA FUERA Mostrar la posicion SIZE-1 //... Mostrar la posicion 3 Mostrar la posicion 2 Mostrar la posicion 1 Mostrar la posicion 0 Lo único que tienes que hacer es cambiar el orden de las dos instrucciones haciendo que primero muestre y después se llame de nuevo. Así el esquema sería: Llamar a mostrar desde la posicion 0 Mostrar la posicion 0 Llamar a mostrar desde la posicion 1 Mostrar la posicion 1 Llamar a mostrar desde la posicion 2 //... Mostrar la posicion SIZE-2 Llamar a mostrar desde la posicion SIZE-1 Mostrar la posicion SIZE-1 FIN // Si hubiese mas instrucciones despues de la llamada recursiva se harian aqui FIN // Si hubiese mas instrucciones despues de la llamada recursiva se harian aqui //... FIN // Si hubiese mas instrucciones despues de la llamada recursiva se harian aqui FIN // Si hubiese mas instrucciones despues de la llamada recursiva se harian aqui Al final lo importante en esto es entender cómo funciona la recursividad, más que conseguir el resultado esperado a prueba y error.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.696
🏴 Libertad!!!!!
|
Por que estas llamando a una funcion recursiva prinmero y depues imprimes el numero, por eso solo empezara con el printf del ultimo elemento en la pila de llamadas a la funcion someFunction Si cambias esto someFunction(&b[1], size - 1);
Por esto someFunction(&b[1], size - 1);
Ahora si imprimiera el Arreglo en Orden correcto. Saludos!
|
|
|
En línea
|
|
|
|
UsuarioZ
Desconectado
Mensajes: 64
|
Ahh, o sea que las instrucciones que estén antes de la llamada se ejecutan mientras se acerca al caso base y las que están después mientras se aleja?
Gracias.
|
|
« Última modificación: 6 Enero 2020, 03:39 am por UsuarioZ »
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.696
🏴 Libertad!!!!!
|
Ahh, o sea que las instrucciones que estén antes de la llamada se ejecutan mientras se acerca al caso base y las que están después mientras se aleja?
No entendi, pero mi Si tomas un cuaderno y anotas paso por paso lo que se esta haciendo. Ejemplo: Primera llamada size = 10 &b[1] = 27 someFunction(&b[1], size - 1); Segunda llamada size = 9 &b[1] = 64 someFunction(&b[1], size - 1); .... Y ya en la llamada final size = 1 &b[1] = 37 someFunction(&b[1], size - 1); Y ahora empiezan los printf: printf("%d ", b[0]); b[0] = 37 ... Etc
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
PORFAVOR AYUDA... LA WEBCAM DE MI NOTEBOOK SE VE AL REVEZ....
Multimedia
|
daniel_bardo
|
2
|
7,117
|
19 Julio 2007, 09:52 am
por R41N-W4R3
|
|
|
problema con arreglo bidimensional no imprime
Programación C/C++
|
MartyMcfly
|
4
|
4,672
|
25 Agosto 2010, 15:00 pm
por Mr.Blue
|
|
|
Array bidimensional y uni. ¿Por qué el arreglo d[i] no se imprime en pantalla???
Programación C/C++
|
mikem
|
2
|
1,681
|
19 Octubre 2014, 03:54 am
por rir3760
|
|
|
Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Programación C/C++
|
NOB2014
|
3
|
3,065
|
9 Junio 2016, 17:10 pm
por geeke
|
|
|
Arreglo de apuntadores vs. arreglo común en lenguaje C.
Programación C/C++
|
NOB2014
|
1
|
2,962
|
1 Octubre 2016, 23:29 pm
por dato000
|
|