Avatar billede jajan Nybegynder
23. april 2002 - 11:25 Der er 3 kommentarer og
3 løsninger

rekursiv funktion

Hej allesammen.

Jeg skal lave en rekursiv funktion for foerste gang og kunne godt taenke mig lidt hjaelp hvis det er muligt.
Opgaven er saaledes:
Arbejdere der skal asfaltere en vej med en maximum lanegde paa 2 miles kraever $200 for denne service.
Hvis vejen er laengere end 2 miles, arbejderen vil opdele vejen i 3 lige store dele og hver af de 3 dele til tre andre arbejdere - det koster saaledes $100 at hyre de tre arbejdere.
Hver af de tre arbejdere vil saa goere det samme som arbejderen der hyrede dem; dvs hvis vejen er max 2 miles, koster det $200 og saadan fortsaetter det.
Input: laengde (af vejen).
return: total pris af asfalteringen af hele vejen.

Er der en der har et bud paa hvordan man laver en rekursiv funktion paa dette?
Paa forhaand tak!!
Avatar billede laffe Nybegynder
23. april 2002 - 12:36 #1
Hvad koster en vej på 2.1 mil ?

Koster den ikke 700 $ !!
Avatar billede laffe Nybegynder
23. april 2002 - 12:41 #2
Hvis ovenstående holder. Altså at en vej på 2100 meter koster 700$,
så har jeg enløsning her:

int BeregnVej(int Length) // Length = længde i meter
{
  int NewLength;
  int Cost = 0;
  if (Length > 2000)
  {
    // Split opgaven ud i tre sub opgaver
    NewLength = Length / 3;
    Cost = 100 + BeregnVej(NewLength) + BeregnVej(NewLength) + BeregnVej(NewLength);
  }else
  {
    Cost = 200;
  }
  return Cost;
}
Avatar billede chries Nybegynder
23. april 2002 - 12:43 #3
Har et forslag her, men forstår ikke 100% pris politiken :-) så det er ikke sikkert det er rigtigt.

#include <iostream.h>

int Arbejder( float vej )
{
    if( vej < 2.0f )
    {
        return 200;
    }

    return 100 + Arbejder( vej/3.0 ) + Arbejder( vej/3.0 ) + Arbejder( vej/3.0 );
}

int _tmain(int argc, _TCHAR* argv[])
{
    float km = 10000;
    cout << "Vej på " << km << " km, koster $" << Arbejder (km) << endl;
    return 0;
}

følgende:
return 100 + Arbejder( vej/3.0 ) + Arbejder( vej/3.0 ) + Arbejder( vej/3.0 );

kan ændres til:
return 100 + Arbejder( vej/3.0 )*3;

men i rekursiv ånden har jeg ladet være :_)
Avatar billede codemon Nybegynder
23. april 2002 - 12:49 #4
Når det er første gang du laver rekursiv funktion synes jeg du skulle prøve at lave et mindre eksempel først. fx fakulitet.

Her er 5! = 5*4*3*2*1
5! = 5*4!
4! = 4*3! osv.

For at udregne 5 fakulitet kaldes derfor metode der udregner 4 fakulitet og dette ganges med 5, men den metode kalder jo så bare 3 fakulitet og ganger dette med 4, indtil metoden bliver kaldt med 1 som så bare retunerer 1

altså

int fakulitet(int n)
{
  int result=1;
  if (n>1)
      result = n*fakulitet(n-1);
 
  return result;
}
Avatar billede jajan Nybegynder
24. april 2002 - 10:50 #5
Hej alle tre,
Mange tak for jeres meget brugbare svar som er lette at forstaa. Jeg deler pointene ud til jer. Codemon kan du ikke laave et svar, saa jeg ogsaa kan give dig point?
Endnu engang tak!
Avatar billede codemon Nybegynder
24. april 2002 - 11:31 #6
Hvis du vil videre med lidt hæftigere rekursion så tjek det her spm (og EJ svar)
http://www.eksperten.dk/spm/53401
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