Tài nguyên học tập

Tìm kiếm với Google

Tìm Kiếm với Google

Hỗ trợ trực tuyến

  • (Trần Đức Anh)

Điều tra ý kiến

Bạn thấy trang này như thế nào?
Đẹp
Bình thường
Sơ sài
Ý kiến khác

Liên kết ViOLET

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • Thành viên trực tuyến

    2 khách và 0 thành viên

    Ảnh ngẫu nhiên

    Lien_Khu_c_Ti_nh_Co_Nhu_Khong_Ga_p_Nhau_La_m_Ngo__Dam_Vinh_Hung.mp3 Images_21.jpg Diendanhaiduongcom19072_21.jpg Mauchuvietbangchuhoadung.png Baner_Tet_1.swf 2_net_khuyet_tren__net_khuyet_duoi.swf Anh_40.gif 14_viet_chu_q_g.swf Bkt_cuoi_cung.swf Emdiduacom.swf We_Are_One_Olympic_Beijing__Son_Ca_NCT_0789223748.mp3 CryOnMyShoulder.mp3 He_muon_Bang_Kieu__Bang_Kieu_NCT_5631821760.mp3 ChiecAoBaBaTranThienThanh.mp3 BinhTriThienKhoiLua.mp3 553141_199470073514933_1767873091_n1.jpg 98619143.jpg 642408821.jpg 64240882.jpg

    Tìm hiểu về Bác Hồ

    Đệ quy

    Wait
    • Begin_button
    • Prev_button
    • Play_button
    • Stop_button
    • Next_button
    • End_button
    • 0 / 0
    • Loading_status
    Nhấn vào đây để tải về
    Báo tài liệu có sai sót
    Nhắn tin cho tác giả
    (Tài liệu chưa được thẩm định)
    Nguồn: st
    Người gửi: Trần Đức Anh (trang riêng)
    Ngày gửi: 11h:24' 12-11-2011
    Dung lượng: 304.5 KB
    Số lượt tải: 14
    Số lượt thích: 0 người
    GIẢI THUẬT ĐỆ QUY
    2
    Mục tiêu
    Đến cuối chương, bạn có thể:
    Giải thích được giải thuật đệ quy là gì.
    Biết cách diễn đạt 1 tác vụ hướng đệ quy.
    Biết cách hiện thực hàm đệ quy
    Phân loại được các loại đệ quy
    Giải thích được cách chạy một hàm đệ quy.
    Biết cách khử một số giải thuật đệ quy.
    3
    1- Đệ quy là gì (Recursion)
    Định nghĩa tường minh: Giải thích khái niệm mới bằng những khái niệm đã có.
    Người = Động vật cấp cao.
    Định nghĩa lòng vòng: Giải thích 1 khái niệm bằng chính khái niệm đó.
    Đệ quy: Đưa ra 1 định nghĩa có sử dụng chính khái niệm đang cần định nghĩa( quay về ).
    Người = con của hai người khác.
    4
    Đệ quy là gì?...
    Con người hiểu được định nghĩa đệ quy vì đệ quy có chặn (điều kiện biên, điều kiện suy biến) – có thể là biên ngầm định.
    Người = con của hai người khác  Ngầm hiểu là có 2 người đầu tiên.
    Thư mục = các thư mục con + các tập tin  Ngầm hiểu: Hiển nhiên tồn tại thư mục gốc là cả ổ đĩa.
    5
    2- Kiểu dữ liệu đệ quy
    Một người được mô tả bằng: tên, năm sinh, cha (một người khác), mẹ (một người khác).
    struct NGUOI
    { char Ten[51];
    int namsinh;
    NGUOI cha;
    NGUOI me;
    };
    Cấu trúc này không
    khả thi trong máy tính
    vì không thể
    cấp bộ nhớ
    6
    Kiểu dữ liệu đệ quy...
    Sửa lại:
    struct NGUOI
    { char Ten[51];
    int namsinh;
    NGUOI* pCha;
    NGUOI* pMe;
    };
    NGUOI x;
    Ten (51 bytes)
    namsinh (2 bytes)
    pCha (4 bytes)
    pMe (4 butes)
    x
    7
    3- Tác vụ đệ quy
    Có thể diễn đạt nhiều tác vụ hướng đệ quy.
    1+2+3+...+ (n-2) + (n-1) + n
    Cộng( 1 tới n) = n + Cộng (1 tới n-1)
    Điều kiện biên là điều kiện ngưng không đệ quy nữa.
    Điều kiện biên: Cộng (1 tới 1) là 1
    Cộng (1 tới n) = 1, n=1
    n + Cộng (1 tới n-1)

    8
    4- Cách viết hàm đệ quy
    Định nghĩa tác vụ đệ quy theo ngôn ngữ tự nhiên thế nào thì hàm cũng viết như thế.
    Thí dụ: n! = 1*2*3*4*5*... * n
    n! = 1, n<=1
    n* (n-1)!
    9
    Cách viết hàm đệ quy...
    n! = 1, n<=1
    n* (n-1)!
    Điều kiện biên
    2 dòng
    2 dòng
    10
    Luyện tập viết hàm đệ quy
    Tìm trị phần tử thứ n của 1 cấp số cộng có số hạng đầu là a, công sai là r
    Un = a, n=1
    r + Un-1
    Tìm trị phần tử thứ n của 1 cấp số nhân có số hạng đầu là a, công bội là q
    Un = a, n=1
    q*Un-1
    Bạn tự viết
    11
    Luyện tập viết hàm đệ quy
    Xuất biểu diễn nhị phân của 1 số nguyên dương.
    13  1101
    Dạng nhị phân của 6 (13/2)
    13%2
    Xuất dạng nhị phân của n:
    Nếu (n>=0)
    { Nếu (n/2>0) Xuất dạng nhị phân của n/2;
    Xuất (n%2);
    }
    Bạn tự viết
    12
    Luyện tập viết hàm đệ quy...
    Viết 2 hàm xuất hệ 8, hệ 16 cho 1 số long n
    13
    5- Phân loại hàm đệ quy
    Tùy thuộc cách diễn đạt tác vụ đệ quy mà có các loại đệ quy sau.
    Đệ quy tuyến tính.
    Đệ quy nhị phân.
    Đệ quy phi tuyến
    Đệ quy hỗ tương.
    14
    5.1-Đệ quy tuyến tính
    Thân hàm gọi 1 lần chính nó
    Un = a , n=1 ( trị thứ n của cấp số cộng)
    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
    5.2-Đệ quy nhị phân
    Thân hàm gọi 2 lần chính nó.
    Chuỗi 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
    5.3 - Đệ quy phi tuyến
    Thân hàm lặp gọi 1 số lần chính 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
    5.4 - Đệ quy hỗ tương
    2 hàm đệ quy gọi nhau
    Un = n , n<5
    Un-1 + Gn-2 , n>=5
    Gn = n-3 , n<8
    Un-1 + Gn-2 , n>8

    long G(int n);
    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
    6- Kỹ thuật tìm giải thuật đệ quy
    Thông số hóa bài toán.
    Tìm các điều kiện biên(chặn), tìm giải thuật cho các tình huống này.
    Tìm giải thuật tổng quát theo hướng đệ quy lui dần về tình huống bị chặn.
    19
    Tính tổng 1 mảng a, n phần tử
    Thông số hóa: int* a, int n
    Điều kiện biên: Mảng 0 phần tử thì tổng bằng 0.
    Giải thuật 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)

    Với các thuật toán đệ quy trên mảng, ta nên giảm dần số phần tử của mảng.
    20
    Tìm trị lớn nhất của mảng a, n phần tử
    Thông số hóa: int*a, int n
    Điều kiện biên: Mảng 1 phần tử thì trị lớn nhất là a[0].
    Giải thuật 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)

    Thuật toán đệ quy tìm trị nhỏ nhất của mảng?
    Do yourself.
    21
    Xuất ngược 1 chuỗi
    S= “QWERT”  TREWQ
    Ký tự đầu của S
    Kết qủa xuất ngược chuỗi &S[1]
    Xuất_ngược (S) :
    L= strlen(S);
    if (L>1) Xuất_ngược (S+1);
    if (L) Xuất (*S);

    Nghĩa là có chuỗi con
    22
    Bài toán xuất ngược 1 chuỗi
    23
    7- Bài toán Tháp Hà Nội
    A
    B
    C
    24
    Bài toán Tháp Hà Nội
    Chuyển n đĩa từ cột X sang cột Z nhờ cột trung gian Y
    (1) Chuyển n-1 đĩa từ cột X sang cột Y nhờ cột trung gian Z vì các đĩa bên trên là các đĩa nhỏ.
    (2) Chuyển đĩa n (to nhất) từ cột X sang cột đích Z.
    (3) Làm lại cho n-1 đĩa còn lại đang ở cột Y sang cột Z với X là cột trung gian.
    25
    Tháp Hà Nội...
    3
    2
    1
    A
    C
    B
    3
    2
    1
    3
    2
    1
    3
    2
    1
    26
    8- Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    27
    Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    28
    Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    29
    Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    30
    Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    31
    Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    32
    Cách thực thi 1 hàm đệ quy
    Xét hàm tính giai thừa của 5
    33
    9- Nhận xét về hàm đệ quy
    HÀM ĐỆ QUY: Vừa tốn bộ nhớ
    vừa chạy chậm
    Giải thuật đệ quy đẹp (gọn gàng), dễ chuyển thành chương trình.
    Nhiều ngôn ngữ không hỗ trợ giải thuật đệ quy (Fortran).
    Nhiều giải thuật rất dễ mô tả dạng đệ quy nhưng lại rất khó mô tả với giải thuật không-đệ-quy.
    34
    10- Khử đệ quy
    Là quá trình chuyển đổi 1 giải thuật đệ quy thành giải thuật không đệ quy.
    Chưa có giải pháp cho việc chuyển đổi này một cách tổng quát.
    Cách tiếp cận:
    Dùng quan điểm đệ quy để tìm giải thuật cho bài toán.
    Mã hóa giải thuật đệ quy.
    Khử đệ quy để có giải thuật không-đệ-quy.
    35
    10.1- Khử đệ quy bằng vòng lặp
    Ý tưởng: Lưu lại các trị của các lần tính toán trước làm dữ liệu cho việc tính toán của lần sau.
    Đi từ điều kiện biên đi tới điều kiện kết thúc.
    36
    Thí dụ: Hàm tính giai thừa của n
    long GiaiThua( int n)
    { if (n<2) return 1;
    return n * GiaiThua(n-1);
    }
    Trị cần lưu
    long GiaiThua( int n)
    { long K=1;
    for (int i =2; i<=n;i++) K=K*i;
    return K;
    }
    Điều kiện biên
    K chính là kết qủa của trị giai thừa trước đó
    37
    Thí dụ hàm tính trị thứ n của dãy Fibonacci:
    1 1 2 3 5 8...
    long Fibo(int n)
    { if (n<=2) return 1; // hai chặn
    return Fibo(n-2) + Fibo (n-1);
    }
    t1
    t2
    t3=t1+t2
    t1
    t2
    t3
    t1
    t2
    t3
    t1
    t2
    t3
    long Fibo(int n)
    { if (n<=2) return 1; // hai chặn
    long t1=1, t2=1;
    for (int i=3; i<=n;i++)
    { t3=t1+t2;
    t1=t2;
    t2= t3;
    }
    return t3;
    }
    i = 3 4 5 6
    38
    10.2- Khử đệ quy bằng stack
    Khởi tạo stack với số phần tử phù hợp.
    Đưa bộ tham số đầu vào stack.
    Khi Stack không trống
    {
    - Lấy bộ tham số ra khỏi stack;
    - Xử lý các tác vụ cơ bản ứng với tham
    số này. Nếu gặp 1 tác vụ đệ quy thì lại đưa
    bộ tham số của tác vụ đệ quy tương ứng vào
    stack.
    }
    39
    Bài toán tháp Hà Nội khử - đệ quy
    Giải thuật đệ quy
    40
    Tóm tắt
    Hàm đệ quy là hàm mà trong thân hàm lại gọi chính nó.
    Hàm đệ quy kém hiệu qủa vì: tốn bộ nhớ va gọi hàm qúa nhiều lần. Tuy nhiên viết hàm đệ quy rất ngắn gọn.
    Vòng lặp và stack là những kỹ thuật giúp khử giải thuật đệ quy.
    41
    Bài tập
    Viết chương trình xuất n trị đầu tiên của 1 cấp số cộng có số hạng đầu là a (nhập từ bàn phím), công sai r (nhập từ bàn phím). Sử dụng kỹ thuật đệ quy để xây dựng hàm tính trị thứ i của 1 cấp số cộng này.
    Dùng kỹ thuật đệ quy để giải phương trình f(x) trong khoảng [a,b] với sai số epsilon.
    Gọi px là pointer của nghiệm
    if (f(a).f(b)>0) return NULL (không có nghiệm)
    else if (b-a <= epsilon) return &a;
    else
    { c=(b+a)/2) ;
    if (f(a).f(c)<=0) return Tìm nghiệm trong đoạn [a,c];
    else return Tìm nghiệm trong đoạn [c,b];
    }
    42
    Bài tập
    Viết chương trình nhập 1 mảng số int, nhập 1 trị x, tìm vị trí có x cuối cùng trong mảng. Dùng kỹ thuật đệ quy để tìm vị trí này.
    Tìm x trong a[], n : -1 nếu n<0
    n-1 nếu a[n-1]=x
    Tìm x trong a, n-1
    Viết chương trình nhập 1 ma trận vuông các số int , nhập 1 trị x. Tìm vị trí có x dùng kỹ thuật đệ quy.
    Tìm vị trí có x trong ma trận m,n
    NULL, nếu n<1
    nếu có x trong cột cuối thì return vị trí này
    nếu có x trong hàng cuối thì return vị trí này
    return Tìm vị trí có x trong m,n-1
     
    Gửi ý kiến

    Nói với em

    Nếu nhắm mắt trong vườn lộng gió,
    Sẽ được nghe nhiều tiếng chim hay,
    Tiếng lích rích chim sâu trong lá,
    Con chìa vôi vừa hót vừa bay.
    Nếu nhắm mắt nghe bà kể chuyện,
    Sẽ được nhìn thấy các bà tiên,
    Thấy chú bé đi hài bảy dặm,
    Quả thị thơm, cô Tấm rất hiền.
    Nếu nhắm mắt nghĩ về cha mẹ,
    Đã nuôi em khôn lớn từng ngày,
    Tay bồng bế sớm khuya vất vả,
    Mắt nhắm rồi lại mở ra ngay.

    Thơ: Vũ Quần Phương
    Tuyển tập ca khúc thiếu nhi 2010, trang 202
    Trung tâm văn hoá - nhà thiếu nhi TP.HCM

    Quảng Cáo Link