SlideShare uma empresa Scribd logo
1 de 27
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương 5: Đệ qui
Khái niệm đệ qui ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tính giai thừa ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Thi hành hàm tính giai thừa 1 1 6 2 n=2 … 2*factorial(1) factorial (2) n=1 … 1*factorial(0) factorial (1) n=0 … return 1; factorial (0) n=3 … 3*factorial(2) factorial (3)
Trạng thái hệ thống khi thi hành hàm tính giai thừa factorial(3) factorial(3) factorial(2) factorial(3) factorial(2) factorial(1) factorial(3) factorial(2) factorial(1) factorial(0) factorial(3) factorial(2) factorial(1) factorial(3) factorial(2) factorial(3) t Gọi hàm factorial(3) Gọi hàm factorial(2) Gọi hàm factorial(1) Gọi hàm factorial(0) Trả về từ hàm factorial(0) Trả về từ hàm factorial(1) Trả về từ hàm factorial(2) Trả về từ hàm factorial(3) Stack hệ thống Thời gian hệ thống t
Bài toán Tháp Hà nội ,[object Object],[object Object],[object Object]
Bài toán Tháp Hà nội – Thiết kế hàm ,[object Object],[object Object],[object Object],[object Object],magic
Bài toán Tháp Hà nội – Mã C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Bài toán Tháp Hà nội – Thi hành
Bài toán Tháp Hà nội – Cây đệ qui
Thiết kế các giải thuật đệ qui ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cây thi hành và stack hệ thống Cây thi hành
Đệ qui đuôi (tail recursion) ,[object Object],[object Object]
Khử đệ qui đuôi hàm giai thừa ,[object Object],[object Object],[object Object],[object Object]
Dãy số Fibonacci ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Dãy số Fibonacci – Cây thi hành Đã tính rồi
Dãy số Fibonacci – Khử đệ qui ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Bài toán 8 con Hậu
Bài toán 4 con Hậu
Bài toán 8 con Hậu – Giải thuật ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Vét cạn
Bài toán 8 con Hậu – Thiết kế phương thức
Bài toán 8 con Hậu – Thiết kế dữ liệu đơn giản const int  max_board = 30 ; class  Queens { public: Queens( int  size) ; bool  is_solved( )  const; void  print( )  const; bool  unguarded( int  col)  const; void  insert( int  col) ; void  remove( int  col) ; int  board_size ; //  dimension of board = maximum number of queens private: int  count ; //  current number of queens = first unoccupied row bool  queen_square[max_board][max_board] ; } ;
Bài toán 8 con Hậu – Mã C++ void  Queens  ::  insert( int  col) { queen_square[count++][col] =  true; } bool  Queens  ::  unguarded( int  col)  const  { int  i ; bool  ok =  true;  for  (i = 0 ;  ok && i < count ;  i++)  //kiểm tra tại một cột ok = !queen_square[i][col] ;  //kiểm tra trên đường chéo lên for  (i = 1 ;  ok && count − i >= 0 && col − i >= 0 ;  i++) ok = !queen_square[count − i][col − i] ; //kiểm tra trên đường chéo xuống for  (i = 1 ;  ok && count − i >= 0 && col + i < board_size ;  i++) ok = !queen_square[count − i][col + i] ; return  ok ; }
Bài toán 8 con Hậu – Góc nhìn khác
Bài toán 8 con Hậu – Thiết kế mới const int  max_board = 30 ; class  Queens { public: Queens( int  size) ; bool  is_solved( )  const; void  print( )  const; bool  unguarded( int  col)  const; void  insert( int  col) ; void  remove( int  col) ; int  board size ; private: int  count ; bool  col_free[max board] ; bool  upward_free[2 * max board − 1] ; bool  downward_free[2 * max board − 1] ; int  queen_in_row[max board] ; // column number of queen in each row } ;
Bài toán 8 con Hậu – Mã C++ mới Queens  ::  Queens( int  size) { board size = size ; count = 0 ; for  ( int  i = 0 ;  i < board_size ;  i++) col_free[i] =  true; for  ( int  j = 0 ;  j < (2 * board_size − 1) ;  j++) upward_free[j] =  true; for  ( int  k = 0 ;  k < (2 * board_size − 1) ;  k++) downward_free[k] =  true; } void  Queens  ::  insert( int  col) { queen_in_row[count] = col ; col_free[col] =  false; upward_free[count + col] =  false; downward_free[count − col + board size − 1] =  false; count++ ; }
Bài toán 8 con Hậu – Đánh giá Thiết kế đầu Thiết kế mới

Mais conteúdo relacionado

Mais procurados

Mais procurados (19)

Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Bai 11 kieu mang (tiet 1)
Bai 11 kieu mang (tiet 1)Bai 11 kieu mang (tiet 1)
Bai 11 kieu mang (tiet 1)
 
Lab4
Lab4Lab4
Lab4
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Kiểu Mảng 1 chiều
Kiểu Mảng 1 chiềuKiểu Mảng 1 chiều
Kiểu Mảng 1 chiều
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
 
Tut6
Tut6Tut6
Tut6
 
Nmlt c08 mang2_chieu
Nmlt c08 mang2_chieuNmlt c08 mang2_chieu
Nmlt c08 mang2_chieu
 
bai tap cau truc du lieu ptit
bai tap cau truc du lieu ptitbai tap cau truc du lieu ptit
bai tap cau truc du lieu ptit
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
Stl string
Stl stringStl string
Stl string
 
4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_
 
Nmlt c07 mang1_chieu
Nmlt c07 mang1_chieuNmlt c07 mang1_chieu
Nmlt c07 mang1_chieu
 
Nmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytuNmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytu
 
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
 
Bai11
Bai11Bai11
Bai11
 
Nmlt c12 quan_lybonho
Nmlt c12 quan_lybonhoNmlt c12 quan_lybonho
Nmlt c12 quan_lybonho
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucoso
 

Destaque

Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...Security Bootcamp
 
Ctdl C06
Ctdl C06Ctdl C06
Ctdl C06giang
 
System hacking_Athena
System hacking_AthenaSystem hacking_Athena
System hacking_AthenaHuynh Khang
 
Ctdl C08
Ctdl C08Ctdl C08
Ctdl C08giang
 
Ctdl C11
Ctdl C11Ctdl C11
Ctdl C11giang
 
Ctdl C10
Ctdl C10Ctdl C10
Ctdl C10giang
 
Ctdl C09
Ctdl C09Ctdl C09
Ctdl C09giang
 
Slide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn LộcSlide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn LộcLoc Tran
 
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàngGiáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàngShin Nosuke
 
Ctdl C07
Ctdl C07Ctdl C07
Ctdl C07giang
 
Ctdl C03
Ctdl C03Ctdl C03
Ctdl C03giang
 
Gioi Thieu
Gioi ThieuGioi Thieu
Gioi Thieugiang
 
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPTBài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPTMasterCode.vn
 
tìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mậttìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mậtanhkhoa2222
 
Chương 6 Bảo mật - Giáo trình FPT
Chương 6 Bảo mật - Giáo trình FPTChương 6 Bảo mật - Giáo trình FPT
Chương 6 Bảo mật - Giáo trình FPTMasterCode.vn
 
Man In The Middle - Hacking Illustrated
Man In The Middle - Hacking IllustratedMan In The Middle - Hacking Illustrated
Man In The Middle - Hacking IllustratedInfoSec Institute
 
Bài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPT
Bài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPTBài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPT
Bài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPTMasterCode.vn
 

Destaque (20)

Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
 
Wireless
WirelessWireless
Wireless
 
Ctdl C06
Ctdl C06Ctdl C06
Ctdl C06
 
System hacking_Athena
System hacking_AthenaSystem hacking_Athena
System hacking_Athena
 
Ctdl C08
Ctdl C08Ctdl C08
Ctdl C08
 
Ctdl C11
Ctdl C11Ctdl C11
Ctdl C11
 
Ctdl C10
Ctdl C10Ctdl C10
Ctdl C10
 
Ctdl C09
Ctdl C09Ctdl C09
Ctdl C09
 
Slide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn LộcSlide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
 
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàngGiáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
 
Avl
AvlAvl
Avl
 
Ctdl C07
Ctdl C07Ctdl C07
Ctdl C07
 
Ctdl C03
Ctdl C03Ctdl C03
Ctdl C03
 
Gioi Thieu
Gioi ThieuGioi Thieu
Gioi Thieu
 
man in the middle
man in the middleman in the middle
man in the middle
 
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPTBài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
 
tìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mậttìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mật
 
Chương 6 Bảo mật - Giáo trình FPT
Chương 6 Bảo mật - Giáo trình FPTChương 6 Bảo mật - Giáo trình FPT
Chương 6 Bảo mật - Giáo trình FPT
 
Man In The Middle - Hacking Illustrated
Man In The Middle - Hacking IllustratedMan In The Middle - Hacking Illustrated
Man In The Middle - Hacking Illustrated
 
Bài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPT
Bài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPTBài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPT
Bài 5: Quản trị một mạng an toàn và Bảo mật các mạng không dây - Giáo trình FPT
 

Semelhante a Ctdl C05

Bài tập CTDL và GT 8
Bài tập CTDL và GT 8Bài tập CTDL và GT 8
Bài tập CTDL và GT 8Hồ Lợi
 
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inHuy Nguyễn
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlabmark
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sởHajunior9x
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 HamCuong
 
Sang tao4
Sang tao4Sang tao4
Sang tao4hieusui
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1Bễ Nguyễn
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trìnhThai Hoc Vu
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Thanh Minh Hoang
 

Semelhante a Ctdl C05 (20)

Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Gt de quy
Gt de quyGt de quy
Gt de quy
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
CHƯƠNG 2.pdf
CHƯƠNG 2.pdfCHƯƠNG 2.pdf
CHƯƠNG 2.pdf
 
Bài tập CTDL và GT 8
Bài tập CTDL và GT 8Bài tập CTDL và GT 8
Bài tập CTDL và GT 8
 
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_in
 
Chuong1 c
Chuong1 c Chuong1 c
Chuong1 c
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlab
 
Bai tap java
Bai tap javaBai tap java
Bai tap java
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 Ham
 
Data Structures and Algorithms Gụidance
Data Structures and Algorithms GụidanceData Structures and Algorithms Gụidance
Data Structures and Algorithms Gụidance
 
Ontap ltc
Ontap ltcOntap ltc
Ontap ltc
 
Sang tao4
Sang tao4Sang tao4
Sang tao4
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
 

Ctdl C05

  • 1. CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương 5: Đệ qui
  • 2.
  • 3.
  • 4. Thi hành hàm tính giai thừa 1 1 6 2 n=2 … 2*factorial(1) factorial (2) n=1 … 1*factorial(0) factorial (1) n=0 … return 1; factorial (0) n=3 … 3*factorial(2) factorial (3)
  • 5. Trạng thái hệ thống khi thi hành hàm tính giai thừa factorial(3) factorial(3) factorial(2) factorial(3) factorial(2) factorial(1) factorial(3) factorial(2) factorial(1) factorial(0) factorial(3) factorial(2) factorial(1) factorial(3) factorial(2) factorial(3) t Gọi hàm factorial(3) Gọi hàm factorial(2) Gọi hàm factorial(1) Gọi hàm factorial(0) Trả về từ hàm factorial(0) Trả về từ hàm factorial(1) Trả về từ hàm factorial(2) Trả về từ hàm factorial(3) Stack hệ thống Thời gian hệ thống t
  • 6.
  • 7.
  • 8.
  • 9. Bài toán Tháp Hà nội – Thi hành
  • 10. Bài toán Tháp Hà nội – Cây đệ qui
  • 11.
  • 12. Cây thi hành và stack hệ thống Cây thi hành
  • 13.
  • 14.
  • 15.
  • 16. Dãy số Fibonacci – Cây thi hành Đã tính rồi
  • 17.
  • 18. Bài toán 8 con Hậu
  • 19. Bài toán 4 con Hậu
  • 20.
  • 21. Bài toán 8 con Hậu – Thiết kế phương thức
  • 22. Bài toán 8 con Hậu – Thiết kế dữ liệu đơn giản const int max_board = 30 ; class Queens { public: Queens( int size) ; bool is_solved( ) const; void print( ) const; bool unguarded( int col) const; void insert( int col) ; void remove( int col) ; int board_size ; // dimension of board = maximum number of queens private: int count ; // current number of queens = first unoccupied row bool queen_square[max_board][max_board] ; } ;
  • 23. Bài toán 8 con Hậu – Mã C++ void Queens :: insert( int col) { queen_square[count++][col] = true; } bool Queens :: unguarded( int col) const { int i ; bool ok = true; for (i = 0 ; ok && i < count ; i++) //kiểm tra tại một cột ok = !queen_square[i][col] ; //kiểm tra trên đường chéo lên for (i = 1 ; ok && count − i >= 0 && col − i >= 0 ; i++) ok = !queen_square[count − i][col − i] ; //kiểm tra trên đường chéo xuống for (i = 1 ; ok && count − i >= 0 && col + i < board_size ; i++) ok = !queen_square[count − i][col + i] ; return ok ; }
  • 24. Bài toán 8 con Hậu – Góc nhìn khác
  • 25. Bài toán 8 con Hậu – Thiết kế mới const int max_board = 30 ; class Queens { public: Queens( int size) ; bool is_solved( ) const; void print( ) const; bool unguarded( int col) const; void insert( int col) ; void remove( int col) ; int board size ; private: int count ; bool col_free[max board] ; bool upward_free[2 * max board − 1] ; bool downward_free[2 * max board − 1] ; int queen_in_row[max board] ; // column number of queen in each row } ;
  • 26. Bài toán 8 con Hậu – Mã C++ mới Queens :: Queens( int size) { board size = size ; count = 0 ; for ( int i = 0 ; i < board_size ; i++) col_free[i] = true; for ( int j = 0 ; j < (2 * board_size − 1) ; j++) upward_free[j] = true; for ( int k = 0 ; k < (2 * board_size − 1) ; k++) downward_free[k] = true; } void Queens :: insert( int col) { queen_in_row[count] = col ; col_free[col] = false; upward_free[count + col] = false; downward_free[count − col + board size − 1] = false; count++ ; }
  • 27. Bài toán 8 con Hậu – Đánh giá Thiết kế đầu Thiết kế mới