19/08/2011 1 LOGO GVGD: Trng Phc Hi quy và Thut toán đ quy 2 Ni dung 1. quy và gii thut đ quy 2. Stack và đ quy 3. Các loi đ quy 4. quy và hình hc fractal 5. K thut tìm gii thut đ quy 3 nh ngha đ quy: K thut đnh ngha mt khái nim trc tip hoc gián tip da vào chính nó. quy và gii thut đ quy 19/08/2011 2 4 Gii thut đ quy là gii thut gi li chính bn thân nó nhng th hin đn gin hn Gii thut đ quy đc ng dng đ chia nh bài toán thành nhng bài toán con cùng kiu d gii quyt hn quy cng có th đc dùng đ thay th cho vòng lp trong mt s trng hp quy và gii thut đ quy 5 quy và gii thut đ quy Mt hàm đ quy gm 2 phn Phn c s: cho giá tr đn gin hoc tm thng ca bài toán, đây là điu kin dng ca đ quy Phn đ quy: cha mt hoc nhiu li gi đn chính nó nhng vi tham s nh hn 6 Ví d Tính giai tha N (vi N nguyên dng) int Factorial(int N) { if (N <= 1) //điu kin dng return 1; return N*Factorial(N-1); //li gi đ quy } quy và gii thut đ quy 19/08/2011 3 7 Ni dung 1. quy và gii thut đ quy 2. Stack và đ quy 3. Các loi đ quy 4. quy và hình hc fractal 5. K thut tìm gii thut đ quy 8 Stack (chng) là mt cu trúc d liu đc bit có 2 thao tác c bn Push: đa phn t vào đu stack Pop: ly phn t đu ra khi stack Nguyên lý hot đng: Last In First Out Là linh hn ca đ quy Stack và đ quy 1 2 3 4 9 Ví d đ quy tính giai tha: int Fact(int N) { if (N <= 1) return 1; return N*Fact(N-1); } void main() { int n = 4; int m = Fact(n); cout<<m; getch(); } Stack và đ quy m = 4*Fact(3) Fact(3) = 3*Fact(2) Fact(2) = 2*Fact(1) Fact(1) = 1 24 6 2 1 19/08/2011 4 10 Ni dung 1. quy và gii thut đ quy 2. Stack và đ quy 3. Các loi đ quy 4. quy và hình hc fractal 5. K thut tìm gii thut đ quy 11 quy tuyn tính Là hình thc đn gin nht ca đ quy Ch có ti đa mt li gi đn chính nó vd: tính giai tha, ly tha, … Các loi đ quy 12 quy tuyn tính Tính ly tha ca 2 s nguyên dng a, N int Power(int a, int N) { if (N == 0) return 1; return a*Power(a, N-1); } Các loi đ quy 19/08/2011 5 13 quy tuyn tính Tính tng giá tr ca n phn t thuc mng A int Sum(int A[], int n) { if (n == 0) return 0; return Sum(A, n – 1) + A[n - 1]; } Các loi đ quy 0 1 2 3 n-2 n-1 … Sum(A, n) Sum(A, n-1) 14 quy tuyn tính Kim tra x có tn ti trong mng A gm n phn t nguyên int IsExist(int A[], int n, int x) { if (n == 0) return 0; if (A[n – 1] == x) return 1; return IsExists(A, n – 1, x); } Các loi đ quy 0 1 2 3 n-2 n-1 … IsExitst(A, n, x) IsExist(A, n-1, x) 15 quy tuyn tính Tìm UCLN ca 2 s nguyên dng a, b int UCLN(int a, int b) { if (a == b) return a; if (a > b) return UCLN(a – b, b); return UCLN(a, b - a); } Các loi đ quy 19/08/2011 6 16 quy nhánh Có nhiu hn mt li gi (thng là 2 hoc 3 li gi) đn chính nó vd: tìm phn t th n ca dãy Fibonacci, tính t hp, bài toán tháp Hà Ni, thut toán tô màu hình kín FloodFill, … Các loi đ quy 17 quy nhánh Tìm s Fibonacci th n (n nguyên dng) int F(int n) { if (n <= 1) return 1; return F(n - 2) + F(n - 1); } Các loi đ quy 18 Các loi đ quy quy nhánh Minh ha tìm s Fibonacci th 5 F(5) F(3) F(4) F(1) F(2) F(2) F(3) F(0) F(1) F(0) F(1) F(1) F(2) F(0) F(1) 1 1 1 1 1 1 1 1 2 3 2 2 5 3 8 19/08/2011 7 19 Các loi đ quy quy nhánh Bài toán tháp Hà Ni: chuyn 2 đa t ct 1 sang ct 3 1 2 3 20 Các loi đ quy quy nhánh Bài toán tháp Hà Ni: chuyn 2 đa t ct 1 sang ct 3 1 2 3 21 Các loi đ quy quy nhánh Bài toán tháp Hà Ni: chuyn N đa t ct 1 sang ct 3 Company Logo 1 2 3 19/08/2011 8 22 Các loi đ quy quy nhánh Bài toán tháp Hà Ni: chuyn N đa t ct 1 sang ct 3 Company Logo 1 2 3 23 quy nhánh Bài toán tháp Hà Ni (chuyn N đa t ct x sang ct y) void Chuyen(int N, int x, int y) { if (N == 1) cout<< "chuyen tu "<<x<<" sang "<<y<<endl; else { Chuyen(N – 1, x, 6 – x - y); Chuyen(1, x, y); Chuyen(N – 1, 6 – x – y, y); } } Các loi đ quy 24 quy nhánh Thut toán tô màu hình kín (FloodFill) Các loi đ quy 19/08/2011 9 25 quy phi tuyn Li gi đ quy đc thc hin trong vòng lp vd: cho dãy đc đnh ngha X 0 = 1 X n = n 2 X 0 + (n-1) 2 X 1 +…+X n-1 Yêu cu: tính giá tr ca X n Các loi đ quy 26 quy phi tuyn Tính X n = n 2 X 0 + (n-1) 2 X 1 +…+X n-1 , bit X 0 = 1 double X(int N) { if (N == 0) return 1; double s = 0; for (int i = 0; i < N; i++) s = s + (N – i)*(N – i)*X(i); return s; } Các loi đ quy 27 quy h tng Li gi có s xoay vòng ln nhau, nh A gi B, B gi C, C gi A, … quy h tng là đ quy rt phc tp nhng có nhng ng dng rt lý thú, chng hn trong hình hc fractal Các loi đ quy 19/08/2011 10 28 quy h tng Hãy tính X n và Y n bit dãy s đc đnh ngha nh sau Các loi đ quy 29 quy h tng double X(int N); double Y(int N); double X(int N) { if (N == 0) return 1; return X(N – 1) + Y(N – 1); } double Y(int N) { if (N == 0) return 1; return X(N – 1) * Y(N - 1); } Các loi đ quy 30 quy h tng ng Hilbert: Các loi đ quy [...]...19/08/2011 31 Sierpinski hình vuông 32 33 11 19/08/2011 34 35 toán Tìm quy Tìm cho th 36 12 19/08/2011 Ví 1: cho n nguyên tính giá quát và ta có n = 1 thì S1 = 1 Company Logo 37 double S(int N) { if (N == 1) return 1; return S(N 1) + 1/(n*n); } Company Logo Ví 38 2: tính A giá N nguyên Thông 1) + A[N-1] . Phc Hi quy và Thut toán đ quy 2 Ni dung 1. quy và gii thut đ quy 2. Stack và đ quy 3. Các loi đ quy 4. quy và hình hc fractal 5. K thut tìm gii thut đ quy 3 . N*Factorial(N-1); //li gi đ quy } quy và gii thut đ quy 19/08/2011 3 7 Ni dung 1. quy và gii thut đ quy 2. Stack và đ quy 3. Các loi đ quy 4. quy và hình hc fractal 5 loi đ quy 30 quy h tng ng Hilbert: Các loi đ quy 19/08/2011 11 31 Ni dung 1. quy và gii thut đ quy 2. Stack và đ quy 3. Các loi đ quy 4. quy và hình