Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: tywok_ en 13 de Diciembre de 2004, 08:10:00 PM

Título: Preguntilla De C
Publicado por: tywok_ en 13 de Diciembre de 2004, 08:10:00 PM
 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?
Título: Preguntilla De C
Publicado por: Juan Mellado en 13 de Diciembre de 2004, 08:27:42 PM
 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
Título: Preguntilla De C
Publicado por: tywok_ en 13 de Diciembre de 2004, 10:02:44 PM
 coño, es verdad(grrr) q mal, no me di cuenta . muchas gracias!