Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ricorsione?....
Forum - C/C++ - ricorsione?....

Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 13:45
Domenica, 22/06/2008
Salve, chiedo forse un aiuto stupido, ma non riesco a capire come posso implementare un programma ANSI C che divide un numero acquisito per 2 fino a quando la divisione non è 1...

es:
inizio
8/ 2 = 4
4 / 2 = 2
2 / 2 = 1
fine
...devo utilizzare la ricorsione????....grazie anticipatamente...

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:15
Domenica, 22/06/2008
Non devi per forza usare la ricorsione.

Puoi benissimo usare un semplice ciclo while.
Devi valutare bene tu se vale la pena di usare la ricorsione, tenendo conto che spreca molta memoria...

Prova a mettere giù tu il codice o almeno tentaci.
Se proprio non ci riesci dimmelo che te lo scrivo.

Ma fai un tentativo
:k:


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 14:21
Domenica, 22/06/2008
Ecco il mio codice...ma nn va....
Codice sorgente - presumibilmente Plain Text

  1.  

int main ()
{
    int num,
        i, x;
    double y, g;

    div_t divresult;
    printf("\nAcquisire: ");
    scanf("%d",
          &num);

    y = pow(2, num);

    for(i = 0; i < y; ++i)
      g = y / 2;

    printf("\n%g -> %g", y, g);

   return 0;
}

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:35
Domenica, 22/06/2008
La funzione con il ciclo while per dividere un numero è questa

Codice sorgente - presumibilmente C/C++

  1. void dividi( int number )
  2. {      
  3.         int n = number;
  4.        
  5.         while( n != 1 )
  6.         {
  7.                 n = n / 2;
  8.                 printf("%d",n);
  9.         }
  10.                
  11.        
  12. }



Mentre se vogliamo usare la ricorsione

Codice sorgente - presumibilmente C++

  1. int dividiRicorsione( int number )
  2. {
  3.         printf("%d",number);
  4.  
  5.         if( number == 1 )
  6.                 return 0;
  7.  
  8.         else
  9.                 dividiRicorsione( number / 2 );
  10. }



Comunque, dando un'occhiata al tuo codice, ti posso subito dire che nel ciclo for quando vai a fare

            g = y / 2
non funziona perché la variabile y non cambia mai, rimane sempre uguale e g di conseguenza non varia a sua volta.

E alla fine che cosa vorresti stampare???
nella printf stampa la variabile iniziale e la finale, che ovviamente dovrebbe essere 1 se il codice funzionasse a dovere.

prova ad usare le funzioni che ti ho dato;);)


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:39
Domenica, 22/06/2008
Se vuoi vedere la differenza tra la ricorsione e il ciclo prova a passare in ingresso pow( 2 , number ) con per esempio number = 8

Sul mio pc la ricorsione mi segnala un errore di memoria in overflow...

Ultima modifica effettuata da lorenzo il 22/06/2008 alle 14:40


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 15:01
Domenica, 22/06/2008
:k:...grazie infinite....

PM Quote