/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Rekursion
Fra : John


Dato : 10-05-01 20:04

Hej Gruppe

Er der ikke en der kan fortælle mig hvad subj. er

På forhånd tak

J



 
 
Janus (10-05-2001)
Kommentar
Fra : Janus


Dato : 10-05-01 20:14

Det er, når en metode kalder sig selv..

for eksempel

public int fibo(int n) {
if (n < 2) return 1;
return (fibo(n-1) + fibo(n+2));
}

Nu må du så ikke lige hænge mig op på, om selve udregningen er rigtig, men
som du kan se, kalder fibo sig selv, og ville blive ved, hvis det ikke var
for den test der er i starten. Prøv eventuelt at tegne et diagram over, hvad
der sker, altså hvordan metoden "deler sig i to", der så deler sig igen,
indtil tallet 1 returneres. Spændende observationer, ret interessant. Man
kan liiige kigge lidt på det, før man fatter det ordentligt.

Vh Janus

--

Med venlig hilsen
Janus Engstrøm - Cybercity Support
<support@cybercity.dk>
Tlf. 70 10 11 09


"John" <weggexx@klog.dk> wrote in message
news:pDBK6.1853$zv2.287475@news010.worldonline.dk...
> Hej Gruppe
>
> Er der ikke en der kan fortælle mig hvad subj. er
>
> På forhånd tak
>
> J
>
>



Janus (10-05-2001)
Kommentar
Fra : Janus


Dato : 10-05-01 20:20

rettelse til koden :

> public int fibo(int n) {
> if (n < 2) return 1;
> return (fibo(n-1) + fibo(n-2));
> }

--

Med venlig hilsen
Janus Engstrøm - Cybercity Support
<support@cybercity.dk>
Tlf. 70 10 11 09


"Janus" <janus@janus.janus> wrote in message
news:9dep9c$v13$1@news.cybercity.dk...
> Det er, når en metode kalder sig selv..
>
> for eksempel
>
> public int fibo(int n) {
> if (n < 2) return 1;
> return (fibo(n-1) + fibo(n+2));
> }
>
> Nu må du så ikke lige hænge mig op på, om selve udregningen er rigtig, men
> som du kan se, kalder fibo sig selv, og ville blive ved, hvis det ikke var
> for den test der er i starten. Prøv eventuelt at tegne et diagram over,
hvad
> der sker, altså hvordan metoden "deler sig i to", der så deler sig igen,
> indtil tallet 1 returneres. Spændende observationer, ret interessant. Man
> kan liiige kigge lidt på det, før man fatter det ordentligt.
>
> Vh Janus
>
> --
>
> Med venlig hilsen
> Janus Engstrøm - Cybercity Support
> <support@cybercity.dk>
> Tlf. 70 10 11 09
>
>
> "John" <weggexx@klog.dk> wrote in message
> news:pDBK6.1853$zv2.287475@news010.worldonline.dk...
> > Hej Gruppe
> >
> > Er der ikke en der kan fortælle mig hvad subj. er
> >
> > På forhånd tak
> >
> > J
> >
> >
>
>



Henry Vest (10-05-2001)
Kommentar
Fra : Henry Vest


Dato : 10-05-01 20:18

Rekursion: se rekursion.

Ovenstående forslidte vittighed forklarer det. Det er altså noget der
viser tilbage til sig selv, fx en metode der kalder sig selv. Det
klassiske eksempel er udregning af n! = n*(n-1)*(n-2)..... *1. Det
kunne gøres på følgende måde:

int fakultet(int n){
if(n==1)
return 1;
else
return n*fakultet(n-1);
}

eller på kort form:

int fakultet(int n){
return (n==1) ? 1 : n*fakultet(n-1);
}


Henry



John (10-05-2001)
Kommentar
Fra : John


Dato : 10-05-01 20:17

Det er da det det er - jeg vidste det godt, da jeg læste de gode eksempler
(forklaringer) I er kommet med

Tak for det

John

"Henry Vest" <henry_vest@get2net.dk> skrev i en meddelelse
news:3hped9.ah2.ln@berlin.eu...
> Rekursion: se rekursion.
>
> Ovenstående forslidte vittighed forklarer det. Det er altså noget der
> viser tilbage til sig selv, fx en metode der kalder sig selv. Det
> klassiske eksempel er udregning af n! = n*(n-1)*(n-2)..... *1. Det
> kunne gøres på følgende måde:
>
> int fakultet(int n){
> if(n==1)
> return 1;
> else
> return n*fakultet(n-1);
> }
>
> eller på kort form:
>
> int fakultet(int n){
> return (n==1) ? 1 : n*fakultet(n-1);
> }
>
>
> Henry
>
>



Bertel Lund Hansen (10-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 10-05-01 21:32

Henry Vest skrev:

>Rekursion: se rekursion.

>Ovenstående forslidte vittighed forklarer det.

Deter da klart at den er forslidt. Den standser jo aldrig! Du har
glemt en stopbetingelse.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Ulrik Magnusson (10-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 10-05-01 20:24

John wrote:

> Hej Gruppe
> Er der ikke en der kan fortælle mig hvad subj. er

Når funktioner kalder sig selv. Der er i hvert fald 2 måder at lave
gentagelser på, rekursion og iteration:

// udskriv tal fra 0 til n
static void iterative( int n )
{
for( int i = 0; i < n; i++ )
{
System.out.println( i );
}
}

// udskriv tal fra start til n
static void recursive( int start, int n )
{
if( start >= n )
{
return;//rekursion færdig
}
System.out.println( start );
recursive( start+1, n ); // rekursivt kald
}

Der er nok iøjnefaldende, at den rekursive metode tager et argument mere

end den iterative - det skyldes at man både skal vide hvor man "er"
(start) og
hvor man skal "hen" (n). Den lokale variabel "i" fra den iterative
metode er
man nødt til at overføre i funktionskaldet, da en opdatering af en lokal
variabel
ikke er synlige "udenfor" funktionen - heller ikke selv om "udenfor" i
dette tilfælde
er funktionen selv.

Den rekursive metode er for de fleste også sværere
at læse end den iterative, men der findes sprog, hvor man ikke har
løkker, og
derfor er tvunget til at bruge rekursion ved gentagelser.

Noget, der er knap så iøjnefaldende er, at den rekursive metode er langt
mindre
effektiv - i forhold til tid og brug af hukommelse end den iterative.
Man kan sige,
at et metodekald er meget dyrt i forhold til at gentage med en løkke.
Derfor må
det generelt anbefales at minimere forekomsten af rekursion i sine
programmer -
også fordi det er sværere at læse. Der er dog nogle problemer, hvor
rekursion
giver mere "naturlige" og læsevenlige programmer, og som er svære at
udtrykke
med iteration

Ulrik Magnusson

--
"I'm a big tough man with a big tough plan
gonna spend my day in a big tough way"
Adam & the Ants - "5 Guns West", Prince Charming 1981
Visit my home page: http://www.geocities.com/ulrikm



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste