Avatar billede mgsj Nybegynder
09. juni 2003 - 17:50 Der er 6 kommentarer og
1 løsning

Hvordan virker denne kode, jeg er ikke helt med. Int to Bin.

void binary(int number) {
    int remainder;

    if(number <= 1) {
        cout << number;
        return;
    }

    remainder = number%2;
    binary(number >> 1);   
    cout << remainder;
}

Det er nærmere betegnet dette stykke kode det drejer sig om:

remainder = number%2;
    binary(number >> 1);   
    cout << remainder;

Er der nogen der kan guide mig igennem hvad er sker her? Især det med Bitshift.

Mvh
Michael
Avatar billede arne_v Ekspert
09. juni 2003 - 18:01 #1
remainder = number%2; // remainder = sidste (mindst signifikakte) bit
binary(number >> 1); // kald binary rekursivt med resten (undtagen sidste bit)
cout << remainder; // udskriv remainder (sidste bit)
Avatar billede arne_v Ekspert
09. juni 2003 - 18:02 #2
Lad os sige at du binært har 1101 (13 decimal):

remainder = 1
kald binary med binært 110
udskriv 1
Avatar billede mgsj Nybegynder
09. juni 2003 - 18:53 #3
Sådan som vi har forstået det er det således at den først kalder funktionen med 13, tager modolus til dette tal,og giver remainder denne værdi, dernæst kalder den funktionen igen så det virker som en slags løkke med den binære værdi af 13 rykket en plads til højre, dvs at den nu sætter remaider til at være modolus 6(binært) og dernæst kalder funktionen med 3(binært) og sætter nu remaider til at være modolus 3, og endelig bliver funktionen kaldt igen med 1(binært).....

det vi så ikke forstår nu er remaider hele tiden bliver ændret hvordan kan den så udskive et tal på 4 cifre, når den får en ny værdi hele tiden.
Avatar billede arne_v Ekspert
09. juni 2003 - 19:14 #4
Fordi den kalder sig selv rekursivt !

input 1101
remainder = 1
kald binary med binært 110
  input 110
  remainer = 0
  kald binary med binært 11
      input 11
      remainder = 1
      kald med binært 1
          input 1
          udskriv 1
      udskriv 1
  udskriv 0
udskriv 1
Avatar billede arne_v Ekspert
09. juni 2003 - 20:10 #5
Hjalp det ?
Avatar billede mgsj Nybegynder
10. juni 2003 - 10:12 #6
Hej igen! Jeg må sige du har været til stor hjælp, arne_v. Takker mange gange. Har dog lige et tillægsspørgsmål. Hvad betyder rekursivt helt præcist?

Mvh
mgsj
Avatar billede arne_v Ekspert
10. juni 2003 - 10:25 #7
rekursivt er når en funktion/metode kalder sig selv
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester