You are on page 1of 43

CHNG 7 GII THUT QUY

Mc tiu
n cui chng, bn c th: Gii thch c gii thut quy l g. Bit cch din t 1 tc v hng quy. Bit cch hin thc hm quy Phn loi c cc loi quy Gii thch c cch chy mt hm quy. Bit cch kh mt s gii thut quy.
2

n tp
Stack: Cu trc (thng l mng) c c ch x l: vo sau ra trc. Queue: Cu trc (thng l mng) c c ch x l: vo trc ra trc. Stack v Queue c gi l danh sch hn ch. Cc tc v trn nhm tr ni chung: Kim tra trng, kim tra y, thm 1 phn t, xa 1 phn t.
3

7.1- quy l g (Recursion)


nh ngha tng minh: Gii thch khi nim mi bng nhng khi nim c. Ngi = ng vt cp cao. nh ngha lng vng: Gii thch 1 khi nim bng chnh khi nim . quy: a ra 1 nh ngha c s dng chnh khi nim ang cn nh ngha( quay v ). Ngi = con ca hai ngi khc.
4

quy l g?...
Con ngi hiu c nh ngha quy v quy c chn (iu kin bin, iu kin suy bin) c th l bin ngm nh. Ngi = con ca hai ngi khc Ngm hiu l c 2 ngi u tin. Th mc = cc th mc con + cc tp tin Ngm hiu: Hin nhin tn ti th mc gc l c a.
5

7.2- Kiu d liu quy


Mt ngi c m t bng: tn, nm sinh, cha (mt ngi khc), m (mt ngi khc). struct NGUOI { char Ten[51]; Cu trc ny khng int namsinh; kh thi trong my tnh NGUOI cha; v khng th NGUOI me; cp b nh };
6

Kiu d liu quy...


Sa li: struct NGUOI { char Ten[51]; int namsinh; NGUOI* pCha; NGUOI* pMe; }; NGUOI x;

pMe (4 butes) pCha (4 bytes) namsinh (2 bytes) Ten (51 bytes) x

7.3- Tc v quy
C th din t nhiu tc v hng quy. 1+2+3+...+ (n-2) + (n-1) + n Cng( 1 ti n) = n + Cng (1 ti n-1) iu kin bin l iu kin ngng khng quy na. iu kin bin: Cng (1 ti 1) l 1 Cng (1 ti n) = 1, n=1 n + Cng (1 ti n-1)
8

7.4- Cch vit hm quy


nh ngha tc v quy theo ngn ng t nhin th no th hm cng vit nh th. Th d: n! = 1*2*3*4*5*... * n n! = 1, n<=1 n* (n-1)!

Cch vit hm quy...


2 dng iu kin bin

n! = 1, n<=1 n* (n-1)!
2 dng

10

Luyn tp vit hm quy


Tm tr phn t th n ca 1 cp s cng c s hng u l a, cng sai l r Un = a, n=1 Bn t vit r + Un-1 Tm tr phn t th n ca 1 cp s nhn c s hng u l a, cng bi l q Un = a, n=1 q*Un-1
11

Luyn tp vit hm quy


Xut biu din nh phn ca 1 s nguyn dng. Xut dng nh phn ca n: 13 1101
Nu (n>=0)

Dng nh phn ca 6 (13/2)

13%2

{ Nu (n/2>0) Xut dng nh phn ca n/2;


Xut (n%2); }

Bn t vit
12

Luyn tp vit hm quy...

Vit 2 hm xut h 8, h 16 cho 1 s long n


13

7.5- Phn loi hm quy


Ty thuc cch din t tc v quy m c cc loi quy sau. (1) quy tuyn tnh. (2) quy nh phn. (3) quy phi tuyn (4) quy h tng.

14

7.7.1- quy tuyn tnh


Thn hm gi 1 ln chnh n Un = a , n=1 ( tr th n ca cp s cng) r + Un-1 , n>1 double U (int n, double a, double r) { if (n==1) return a; return r + U(n-1,a,r); }
15

7.5.2- quy nh phn


Thn hm gi 2 ln chnh n. Chui s Fibonacci: 1 1 2 3 5 8 13 ... Un = 1, n=1,2 Un-2 + Un-1 , n>2 long Fibo (int n) { if (n<=2) return 1; return Fibo(n-2) + Fibo(n-1); }
16

7.5.3- quy phi tuyn


Thn hm lp gi 1 s ln chnh n Un = n , n <6 Un-5 + Un-4 + Un-3 + Un-2 + Un-1 ,n >6 long U ( int n) { if (n<6) return n; long S= 0; for (int i = 5; i>0; i--) S+= U(n-i); return S; }
17

7.5.4- quy h tng


long G(int n); 2 hm quy gi nhau Un = n , n<5 Un-1 + Gn-2 , n>=5 Gn = n-3 , n<8 Un-1 + Gn-2 , n>8 long U ( int n)

{ if (n<5) return n;
return U(n-1) + G(n-2); } long G(int n) { if (n<8) return n-3;

return U(n-1) + G(n-2);


}
18

7.6- K thut tm gii thut quy


Thng s ha bi ton. Tm cc iu kin bin(chn), tm gii thut cho cc tnh hung ny. Tm gii thut tng qut theo hng quy lui dn v tnh hung b chn.

19

Tnh tng 1 mng a, n phn t


Thng s ha: int*a, int n iu kin bin: Mng 0 phn t th tng bng 0. Gii thut chung: Sum(a,n) = a[0] + a[1] + a[2] + ... + a[n-2] +a[n-1] Sum(a,n-1) Sum (a,n) = 0 , n=0 a[n-1] + Sum(a, n-1) Vi cc thut ton quy trn mng, ta nn gim dn s phn t ca mng.

20

Tm tr ln nht ca mng a, n phn t


Thng s ha: int*a, int n iu kin bin: Mng 1 phn t th tr ln nht l a[0]. Gii thut chung: Max(a,n) = a[0] , a[1] , a[2] , ... , a[n-2] , a[n-1] Max(a,n-1) Max (a,n) = a[0] , n=1 a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1) Thut ton quy tm tr nh nht ca mng?
Do yourself.

21

Xut ngc 1 chui


S= QWERT TREWQ
K t u ca S Kt qa xut ngc chui &S[1]

Xut_ngc (S) : L= strlen(S); if (L>1) Xut_ngc (S+1); if (L) Xut (*S);

Ngha l c chui con

22

Bi ton xut ngc 1 chui

23

7.7- Bi ton Thp H Ni


Tham kho gio trnh K thut LT Nng cao, Trn Hong Th, i hc Lt, trang 17, file .pdf gi.

C
24

Bi ton Thp H Ni
Xem cch phn tch v m ha bi ton bi ton trong ti liu tham kho

Chuyn n a t ct X sang ct Z nh ct trung gian Y (1) Chuyn n-1 a t ct X sang ct Y nh ct trung gian Z v cc a bn trn l cc a nh. (2) Chuyn a n (to nht) t ct X sang ct ch Z. (3) Lm li cho n-1 a cn li ang ct Y sang ct Z vi X l ct trung gian.
25

Thp H Ni...

1 2 3

1 2

1 A B

2 3
C
26

7.8- Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq n: 5

Kq
n: 4 Kq n: 3 Kq n: 2 Kq n: 1

27

Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq: n: 5

Kq:
n: 4 Kq: n: 3 Kq: n: 2 Kq 1 n: 1

28

Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq: n: 5

Kq:
n: 4 Kq: n: 3 Kq: 2*1=2 n: 2 Kq 1 n: 1

29

Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq: n: 5

Kq:
n: 4 Kq: 3*2=6 n: 3 Kq: 2 n: 2

30

Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq: n: 5

Kq: 4*6=24
n: 4 Kq: 6 n: 3

31

Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq:5*24=120 Kq: n: 5

Kq:

24
n: 4

32

Cch thc thi 1 hm quy


Xt hm tnh giai tha ca 5
Kq: 120 n: 5

33

7.9- Nhn xt v hm quy


HM QUY: Va tn b nh va chy chm Gii thut quy p (gn gng), d chuyn thnh chng trnh. Nhiu ngn ng khng h tr gii thut quy (Fortran). Nhiu gii thut rt d m t dng quy nhng li rt kh m t vi gii thut khng-quy.
34

7.10- Kh quy
L qu trnh chuyn i 1 gii thut quy thnh gii thut khng quy. Cha c gii php cho vic chuyn i ny mt cch tng qut. Cch tip cn: (1) Dng quan im quy tm gii thut cho bi ton. (2) M ha gii thut quy. (3) Kh quy c gii thut khng--quy.
35

7.10.1- Kh quy bng vng lp

tng: Lu li cc tr ca cc ln tnh ton trc lm d liu cho vic tnh ton ca ln sau. i t iu kin bin i ti iu kin kt thc.

36

Th d: Hm tnh giai tha ca n


long GiaiThua( int n) { if (n<2) return 1; return n * GiaiThua(n-1); } long GiaiThua( int n) { long K=1; for (int i =2; i<=n;i++) K=K*i; return K; }
Tr cn lu

iu kin bin K chnh l kt qa ca tr giai tha trc

37

Th d hm tnh tr th n ca dy Fibonacci:
long Fibo(int n) { if (n<=2) return 1; // hai chn return Fibo(n-2) + Fibo (n-1); } long Fibo(int n) { if (n<=2) return 1; // hai chn long t1=1, t2=1; for (int i=3; i<=n;i++) { t3=t1+t2; t1=t2; t2= t3; } return t3; }

1 1 2 3 5 8...
t 1 t 2 t1 t3=t1+t 2 t2 t1 t3 t2 t1 i = 3 4 t3 t2 5 t3 6

38

7.10.2- Kh quy bng stack


Khi to stack vi s phn t ph hp. a b tham s u vo stack. Khi Stack khng trng { - Ly b tham s ra khi stack; - X l cc tc v c bn ng vi tham s ny. Nu gp 1 tc v quy th li a b tham s ca tc v quy tng ng vo stack. }
39

Bi ton thp H Ni kh- quy


Gii thut quy

40

Tm tt
Hm quy l hm m trong thn hm li gi chnh n. Hm quy km hiu qa v: tn b nh va gi hm qa nhiu ln. Tuy nhin vit hm quy rt ngn gn. Vng lp v stack l nhng k thut gip kh gii thut quy.

41

Bi tp
Vit chng trnh xut n tr u tin ca 1 cp s cng c s hng u l a (nhp t bn phm), cng sai r (nhp t bn phm). S dng k thut quy xy dng hm tnh tr th i ca 1 cp s cng ny. Dng k thut quy gii phng trnh f(x) trong khong [a,b] vi sai s epsilon. Gi px l pointer ca nghim if (f(a).f(b)>0) return NULL (khng c nghim) else if (b-a <= epsilon) return &a; else { c=(b+a)/2) ; if (f(a).f(c)<=0) return Tm nghim trong on [a,c]; else return Tm nghim trong on [c,b]; }
42

Bi tp
Vit chng trnh nhp 1 mng s int, nhp 1 tr x, tm v tr c x cui cng trong mng. Dng k thut quy tm v tr ny. Tm x trong a[], n : -1 nu n<0 n-1 nu a[n-1]=x Tm x trong a, n-1 Vit chng trnh nhp 1 ma trn vung cc s int , nhp 1 tr x. Tm v tr <dng,ct> c x dng k thut quy.
NULL, nu n<1 Tm v tr c x trong ma trn m,n nu c x trong ct cui th return v tr ny nu c x trong hng cui th return v tr ny return Tm v tr c x trong m,n-1

43

You might also like