L14
This presentation is the property of its rightful owner.
Sponsored Links
1 / 24

L14 Rekursiivsed algoritmid PowerPoint PPT Presentation


  • 74 Views
  • Uploaded on
  • Presentation posted in: General

L14 Rekursiivsed algoritmid. Ülesanne Algoritm Programm. Ülesanne : leida antud lõigul [ i ; j ] asuvate naturaalarvude korrutis ( i ja j on naturaalarvud). Konkreetne ülesanne: lõik on [3; 6],

Download Presentation

L14 Rekursiivsed algoritmid

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


L14 rekursiivsed algoritmid

L14

Rekursiivsed algoritmid


L14 rekursiivsed algoritmid

Ülesanne

Algoritm

Programm


L14 rekursiivsed algoritmid

Ülesanne: leida antud lõigul [i; j] asuvate

naturaalarvude korrutis (i ja j on naturaalarvud).

Konkreetne ülesanne: lõik on [3; 6],

teguriteks on arvud 3, 4, 5 ja 6. Vastus: 360

Konkreetne ülesanne: lõik on [13; 21],

teguriteks on arvud 13,14,15,16,17,18,19,20,21.

Vastus: 106661318400

Konkreetne ülesanne: lõik on [3; 3],

ainukeseks “teguriks” on arv 3. Vastus: 3

Konkreetne ülesanne: lõik on [3; 2] (tühi),

tegureid ei ole. Vastus: 1


L14 rekursiivsed algoritmid

ALGORITM

PROGRAMM

korrutis(i, j)

---Antud: naturaalarvud i, j

---Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

t := 1; k := i

k j ?

t := t× k

k := k + 1

(t)

long korrutis(int i, int j){

// Antud: naturaalarvud i,j

// Tulemus: tagastatakse

// korrutis i×(i+1) × …× j

long tulem = 1;

while(i <= j){

tulem = tulem * i;

i++;

}//while

return tulem;

}//korrutis


L14 rekursiivsed algoritmid

  • Algoritm:

  • tegevusplaan ülesande lahendamiseks teatavate lihtsamate operatsioonide teostamise teel;

  • ülesande lahendamise skeem;

  • ülesande lahendamiskäigu kirjeldus.

  • Programm: kindlale täitjale (arvutile) orienteeritud

  • tegevuseeskiri ülesande lahendamiseks, tavaliselt

  • mingi algoritmi realisatsioon (seade arvutile).


L14 rekursiivsed algoritmid

. . .

Ülesanne

Algoritm

Konkreetne

ülesanne (1)

Konkreetne

ülesanne (2)

Konkreetne

ülesanne (3)

. . .

Programm

. . .

Algoritm’

Programm

. . .

Täpne

ülesande seade,

ülesande püstitus

Täpne

lahenduskava,

lahenduse idee

Täpne eeskiri

arvutile, algor.

realisatsioon


L14 rekursiivsed algoritmid

ALGORITM

PROGRAMM

korrutis(i, j)

---Antud: naturaalarvud i, j

---Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

t := 1; k := i

k j ?

t := t× k

k := k + 1

(t)


L14 rekursiivsed algoritmid

korrutis(i, j)

---Antud: naturaalarvud i, j

---Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

t := 1; k := i

k j ?

t := t× k

k := k + 1

(t)

long korrutis(int i, int j) throws

IllegalArgumentException{

// Antud: naturaalarvud i, j

// Tulemus: tagastatakse

// korrutis i×(i+1) × …× j

if(i < 1 || j < 1) throw

new IllegalArgumentException();

long tulem = 1;

while(i <= j){

tulem *= i++;

}//while

return tulem;

}//korrutis


L14 rekursiivsed algoritmid

korrutis(i, j)

---Antud: naturaalarvud i, j

---Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

t := 1; k := i

k j ?

t := t× k

k := k + 1

(t)

long korrutis(int i, int j) {

// Antud: naturaalarvud i, j

// Tulemus: tagastatakse

// korrutis i×(i+1) × …× j

long tulem = 1;

for(; i <= j; i++){

tulem *= i;

}//for

return tulem;

}//korrutis


L14 rekursiivsed algoritmid

BigInteger korrutis(int i, int j) {

// Antud: naturaalarvud i, j

// Tulemus: tagastatakse

// korrutis i×(i+1) × …× j

BigInteger tulem =

new BigInteger(“1”);

for(; i <= j; i++){

tulem = tulem.multiply(

new BigInteger(

new Integer(i).toString()));

}//for

return tulem;

}//korrutis

korrutis(i, j)

---Antud: naturaalarvud i, j

---Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

t := 1; k := i

k j ?

t := t× k

k := k + 1

(t)


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

leida

antud lõigul [i; j] asuvate

naturaalarvude korrutis

(i ja j on naturaalarvud).

korrutis(i, j)

--- Antud: naturaalarvud i, j

--- Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

t := 1; k := j

i k ?

t := t× k

k := k - 1

(t)

i > k ?

t := t× k

k := k - 1


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

viilutada antud päts.

viilutada(p)

--- Antud: päts p

--- Tulemus: päts p viilutatud,

--- viilud pandud kasti

p paksus 1 cm?

panna p kasti

lõigata pätsi p

paremast otsast viil,

panna see kasti


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

lõhkuda antud pakk.

lõhkuda(p)

--- Antud: pakk p

--- Tulemus: pakk p lõhutud,

--- halud pandud kasti

p paksus 15 cm?

panna p kasti

lüüa paku p

paremast küljest halg,

panna see kasti


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

lõhkuda antud pakk.

lõhkuda(p)

--- Antud: pakk p

--- Tulemus: pakk p lõhutud,

--- halud pandud kasti

p paksus 15 cm?

panna p kasti

lüüa pakk p pooleks -

kaheks pakuks p1 ja p2;

lõhkuda(p1);

lõhkuda(p2)

rekursiivne rakendus


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

viilutada antud päts.

viilutada(p)

--- Antud: päts p

--- Tulemus: päts p viilutatud,

--- viilud pandud kasti

p paksus 1 cm?

panna p kasti

lõigata päts p pooleks -

kaheks pätsiks p1 ja p2;

viilutada(p1);

viilutada(p2)

rekursiivne rakendus


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

viilutada antud päts.

viilutada(p)

--- Antud: päts p

--- Tulemus: päts p viilutatud,

--- viilud pandud kasti

p paksus 1 cm?

panna p kasti

lõigata päts p kaheks -

pätsiks p1 ja viiluks, viil

panna kasti;

viilutada(p1)

rekursiivne rakendus


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

leida

antud lõigul [i; j] asuvate

naturaalarvude korrutis

(i ja j on naturaalarvud).

“otsast lõikamisega”

korrutis(i, j)

--- Antud: naturaalarvud i, j

--- Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

i > j?

(1)

k := korrutis(i+1, j)

t := i×k

(t)

i > j?

(1)

(i × korrutis(i+1, j))


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

leida

antud lõigul [i; j]

asuvate naturaal-

arvude korrutis

(i ja j on naturaal-

arvud).

“pooleks lõikamisega”

korrutis(i, j)

--- Antud: naturaalarvud i, j

--- Tulemus: tagastatakse

--- korrutis i×(i+1) × …× j

n := j - i + 1; --- tegurite arv

n 0?

(1) --- tegureid ei ole

n = 1?

(i) --- on üks tegur

k :=

(korrutis(i,i+k-1)×korrutis(i+k, j))


L14 rekursiivsed algoritmid

PROGRAMM

PROGRAMM

// “pooleks lõikamisega”

// “otsast lõikamisega”

long korrutis(int i, int j){

// Antud: naturaalarvud i, j

// Tulemus: tagastatakse

// korrutis i×(i+1) × …× j

int n = j - i + 1;

if(n <= 0) return 1;

if(n == 1) return i;

k = n/2;

return korrutis(i, i+k-1)*

korrutis(i+k, j));

}//korrutis

long korrutis(int i, int j){

// Antud: naturaalarvud i, j

// Tulemus: tagastatakse

// korrutis i×(i+1) × …× j

if(i > j) return 1;

return

i*korrutis(i+1, j);

}//korrutis


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

leida antud mitte-

negatiivse täisarvu

faktoriaal.

faktoriaal(n)

--- Antud: mittenegat. täisarv n

--- Tulemus: tagastatakse n!

--- Alamalgoritm: korrutis( )

n = 0?

(1)

(korrutis(1, n))

Definitsioon 1.

Naturaalarvu n

faktoriaal

n! = 1×2× . . . ×n.

Arvu 0 faktoriaal

0! = 1.


L14 rekursiivsed algoritmid

ALGORITM

Ülesanne:

leida antud mitte-

negatiivse täisarvu

faktoriaal.

faktoriaal(n)

--- Antud: mittenegat. täisarv n

--- Tulemus: tagastatakse n!

n = 0?

(1)

(faktoriaal(n-1) × n)

Definitsioon 2.

Mittenegatiivse täis-

arvu n faktoriaal n!:

a)kui n = 0,

siis n! = 1;

b) kui n > 0,

siis n! = (n-1)! × n.


L14 rekursiivsed algoritmid

ALGORITM

hanoi(a, b, c, n)

--- Antud: platsid a, b ja c;

--- n - tõstetavate ketaste arv

--- Tulemus: n pealmist ketast

--- platsilt a tõstetud platsile b (pealmisteks)

--- kasutades platsi c laoplatsina

hanoi(a, c, b, n-1)

tõsta üks ketas platsilt a platsile b

hanoi(c, b, a, n-1)

a

b

c

a

b

c


L14 rekursiivsed algoritmid

class Hanoi{

static void hanoi(int a, int b, int c, int n){

if(n == 0) return;

hanoi(a, c, b, n-1);

System.out.print(” ” + a + "-->" + b);

hanoi(c, b, a, n-1);

}

public static void main(String[ ] a){

hanoi(1, 2, 3, 4);

}

}//Hanoi

1-->3 1-->2 3-->2 1-->3 2-->1 2-->3 1-->3 1-->2

3-->2 3-->1 2-->1 3-->2 1-->3 1-->2 3-->2


  • Login