int main(void) {
static int=5;
if(--i) {
main();
printf("%d",i);
}
}
la salida del programa anterior es—
0000
Pero creo que debería ser—
1234
no se por que por favor ayúdenme.
usuario2748351
int main(void) {
static int=5;
if(--i) {
main();
printf("%d",i);
}
}
la salida del programa anterior es—
0000
Pero creo que debería ser—
1234
no se por que por favor ayúdenme.
La razón de los ceros es que i
se reduce a cero antes del primero printf
se ejecuta la declaración. A medida que se desenrolla, imprime i (que sigue siendo cero) cada vez.
Sería mejor usar una función separada que main()
llama y pasa un parámetro a (y luego pasa el parámetro a cada llamada en lugar de usar una variable estática).
i
a 5main
Hasta que i
se convierte en cero.i
siendo cero.printf
Ahí está la respuesta.
Puedes probar esto usando un depurador
[First call: i->4 and call main()]
[Second call: i->3 and call main()]
[Third call: i->2 and call main()]
[Fourth call: i->1 and call main()]
[Fifth call: i->0 and condition false as it gives 0.]
Ahora es el momento de imprimir el valor de i, que era la siguiente línea después de main(). El control vuelve a la cuarta a la primera llamada para imprimir el valor de i.
[Fourth Call: printing value of i which is 0.]
[Third call: printing value of i which is 0.]
[Second call: printing value of i which is 0.]
[First call: printing value of i which is 0.]
Creo que quieres decir
4321
y lo sería si imprimieras antes de recurriste.– Hunter Mc Millen
04/09/2013 a las 20:15
static int i=5;
o hay alguna C-magia que establecei
a 5?– Nick T.
04/09/2013 a las 23:31