Hola! Estaba haciendoun programita para que me calculase una cosa de un problema de mates pero me encontre un pequeño bug..
a ver os pongo el codigo
#include<stdio.h>
[b]int numveces;[/b]
int numcambios;
int in[9];
[b]void busca(int nivel){[/b]
if(nivel==8){
if(in[7]==1)numcambios++;
if(numcambios == 6){
[b]numveces++;[/b]
printf("%d ",numveces);
}
}
else{
for(in[nivel]=0;in[nivel]<2;in[nivel]++){
if(nivel==0){
if(in[nivel]==0)numcambios++;
busca(nivel+1);
if(in[nivel]==0)numcambios--;
}
else{
if(in[nivel-1]==in[nivel]){
busca(nivel+1);
}
else{
numcambios++;
busca(nivel+1);
numcambios--;
}
}
}
}
}
int main(){
[b]int numveces=0;[/b]
int numcambios=0;
[b]busca(0);[/b]
[b]printf("%d\n",numveces);[/b]
return 0;
}
Bueno, este es el codigo. Os he puesot en negrita lo importante. A ver, en la función busca, que es recursiva, modifico la variable global numveces y en el debug he comprobado q es asi. Pero cuando salgo de la recursiva, me toma como valor 0, en el printf ese. ¿Por que es? Osea, supongo q es por el scope, pero segun tenia entendido yo, eso se puede hacer y si no recuerdo mal lo he hecho alguna vez. ALguien tiene alguna idea?
Tienes dos veces declarada la variable numveces:
- La primera vez de forma global, que es la que se actualiza en la función busca().
- La segunda vez de forma local al main(). En el main() predomina esta variable local (sobre la global) que por tanto nunca se modifica y siempre vale cero.
Quita la local, e inicializa la global a cero directamente en su declaración.
Saludos
coño, es verdad(grrr) q mal, no me di cuenta . muchas gracias!