Python: Đệ Quy (Recursion) - V1Study

Học viện Đào tạo và Công nghệ V1Study
  • Đào tạo Độ tuổi từ 5 - 11 Độ tuổi từ 12 - 17 Từ 18 tuổi
  • Lập trình Python Lập trình C C++ Java C# - C Sharp Android Scratch Pascal Robot mBot
  • Web ReactJS HTML5 CSS3 JavaScript Node.js JSP ASP.NET Core jQuery PHP
  • FW-CMS Laravel AngularJS Flutter Magento Bootstrap VueJS CodeIgnitor WordPress Sass Drupal
  • Video Video Python Video Lập trình C Video C# Video Java Video HTML5-CSS3-JavaScript Video SQL Server Video PHP Video jQuery Video Android Video C++ Video Scratch
  • Video1 Video XML-JSON Video MySQL Video Excel Video Giải thuật và Lập trình Video Sức khỏe Video Drupal Video mBot Video Giáo dục - Khoa học
  • Other Unity Giải thuật và lập trình Giải thuật và lập trình - C CCNA Mạng máy tính Design Patterns English Facebook SEO Git Tin học đại cương Japanese App-Uti Download
  • Data SQL Server XML JSON MySQL
  • News
Học viện Đào tạo và Công nghệ V1Study ≡ Python Bài học Core Bài 1. Giới thiệu Bài 2. Hướng dẫn cài đặt VS Code và tích hợp Python Bài 3. Cài đặt và chạy Python Bài 4. 11 lời khuyên cho người mới bắt đầu học lập trình Python Bài 5. Ghi chú trong Python Bài 6. f-Strings của Python 3: Cú pháp định dạng chuỗi được cải thiện Bài 7. Cách nhập liệu trong Python Bài 8. Từ khóa (Keyword) Bài 9. Cú pháp cơ bản Bài 10. Các phép toán cơ bản Bài 11. Các hàm toán học trong Python Bài 12. Các loại biến và kiểu dữ liệu Bài 13. if-else Bài 14. Vòng lặp for Bài 15. Vòng lặp while Bài 16. Hàm (Function) Bài 17. Lời gọi hàm (Call the function) Bài 18. Đối số và tham số hàm Bài 19. Hàm ẩn danh (lambda) Bài 20. Phạm vi của các biến Bài 21. Đệ quy (Recursion) Bài 22. List Bài 23. Các hàm xử lý List Bài 24. Các phương thức xử lý List Bài 25. Tuple Bài 26. Dictionary Bài 27. Sự khác nhau giữa sort() và sorted() trong Python Bài 28. Date và Time Bài 29. Module Bài 30. I/O File Bài 31. Ngoại lệ (Exception) Bài 32. Assertion trong Python Bài 33. random trong Python Bài 34. Hàm xử lý chuỗi (string) Bài 35. Biểu thức chính quy (RegEx) Hướng đối tượng (OOP) Tạo Lớp và Đối tượng Truy cập các thuộc tính và phương thức của đối tượng Hàm tạo (Constructor) Từ khóa self Getter và Setter Thừa kế (Inheritant) Ghi đè phương thức (Override) super() Python Iterator Bài tập Bài tập cơ bản Bài tập phần điều kiện Bài tập phần vòng lặp Bài tập phần hàm Bài tập phần List-Tuple-Dictionary Bài tập phần Class Bài tập phần thừa kế Bài tập phần Biểu thức chính quy (RegEx) Bài tập phần file Bài tập phần vẽ hình Bài tập phần thuật toán Quiz Ví dụ Tính tổng các số từ 1 đến N Tính tổng nghịch đảo các số từ 1 đến N In ra các giá trị từ 1-100 và từ 100-1 Hoán vị giá trị 2 biến cho nhau Giải bài toán gà-chó Giải phương trình bậc nhất 1 ẩn Giải phương trình bậc 2 Xác định số ngày trong tháng dương lịch Tìm ước số chung lớn nhất của 2 số Tìm bội số chung nhỏ nhất của 2 số Xác định loại tam giác từ 3 số a, b, c Kiểm tra một số bất kỳ có phải chính phương không Kiểm tra tính đặc biệt của một số Kiểm tra nguyên âm, phụ âm, chữ số Kiểm tra một số có phải nguyên tố không In dãy Fibonacci Kiểm tra số nhập vào có nguyên hay không Tách các chữ số của một số nguyên bất kỳ Game Rắn săn mồi bằng Turtle trong Python Cuộc đua Rùa với Turtle-Python Tạo đồng hồ kỹ thuật số bằng Python-Turtle Vẽ thiết kế đồng hồ bằng Turtle-Python Vẽ khối lập phương bằng Turtle-Python Vẽ mạng nhện 2 lớp với Turtle-Python Tạo một game hai người chơi đơn giản bằng Turtle-Python Tạo trò chơi bóng bàn (Pong) với Turtle-Python Dùng vòng lặp for vẽ hình phức tạp Vẽ đường tròn đồng tâm với Turtle-Python Word guess Quiz game Bài học Đồ họa Rùa (Turtle) Bài 1. Các phương thức chuyển động của rùa Bài 2. Làm việc với vị trí của rùa Bài 3. Cài đặt đơn vị đo Bài 4. Các phương thức vẽ Bài 5. Chỉnh màu cho bút Bài 6. Các phương thức tô màu Bài 7. Kiểm soát bút vẽ Bài 8. Trạng thái của rùa Bài 9. Sử dụng sự kiện cho rùa Bài 10. Các phương thức đặc biệt cho rùa Bài 11. Kiểm soát cửa sổ hiển thị Bài 12. Kiểm soát hoạt hình (animation) Bài 13. Sử dụng các sự kiện màn hình Bài 14. Các phương thức nhập Bài 15. Cài đặt và phương thức đặc biệt Bài 16. Phương thức riêng cho màn hình, không được thừa kế từ TurtleScreen Bài 17. Các lớp phổ biến Bài 18. Trợ giúp và cấu hình Bài 19. Cách tạo hình dạng Turtle tùy chỉnh trong Python? Bài 20. Tô màu với Turtle-Python Bài 21. Các hàm turtle.setpos() và turtle.goto() trong Turtle-Python Bài 22. Cách tạo tam giác với Turtle-Python Turtle sử dụng sự kiện onscreenclick Bài 23. Vẽ các hình tròn có màu sắc và vị trí ngẫu nhiên với Turtle-Python Bài 24. Vẽ và tô màu cho hình đa giác bất kỳ với Turtle Tkinter Bài 1. Giới thiệu về Tkinter Bài 2. Tìm hiểu về Layout Bài 3. Widget Bài 4. Menu Bài 5. Hộp thoại Bài 6. Đồ họa Tham khảo Cách kích hoạt pip Tạo bảng với lớp PrettyTable Sửa lỗi: AssertionError: torch not compiled with CUDA enabled JSON trong Python Hướng dẫn phân loại sử dụng SVM (Support Vector Machines) Mô hình tuần tự (Sequential model) In tam giác Pascal với Python Solution bài tập 8 phần hàm - bài tập xử lý chuỗi Xây dựng ứng dụng di động với framework Python Kivy Python eval(): Đánh giá biểu thức động Dự án Python cho người mới bắt đầu: Thông báo giá Bitcoin Sử dụng PyInstaller để dễ dàng phân phối các ứng dụng Python Cách xây dựng một ứng dụng GUI Python với wxPython Các kiểu dữ liệu cơ bản trong Python Bố cục PyQt: Tạo các ứng dụng GUI chuyên nghiệp Python và PyQt: Tạo Menu, Toolbar, Status Bar Tôi có thể làm gì với Python? Cách in có định dạng trong Python với bài toán in các thừa số nguyên tố Math racing Taught Rose: Phép toán số học, so sánh, logic, điều kiện if-else Orchid: nhập liệu với input(), int(input()), float(input()) Atlas: Buổi học số 5 Orchid: Buổi học số 5 Trí tuệ nhân tạo (AI) Pip là gì? Python AI: Cách xây dựng mạng Nơ-ron thần kinh và đưa ra dự đoán Hồi quy tuyến tính trong Python Tách tập dữ liệu của bạn với train_test_split() của scikit-learning Nhận dạng khuôn mặt với dưới 25 dòng mã Python Nhận diện khuôn mặt theo cách truyền thống với Python Nhận diện khuôn mặt trên Webcam bằng Python Phân đoạn hình ảnh bằng không gian màu trong OpenCV + Python Một kỹ thuật chuẩn đoán bệnh viêm da cơ địa sử dụng mạng học sâu English Python basic Python: Đệ quy (Recursion) Khóa học qua video: Lập trình Python All Lập trình C# All SQL Server All Lập trình C Java PHP HTML5-CSS3-JavaScript Đăng ký Hội viên Tất cả các video dành cho hội viên

Ngôn ngữ Python cho phép hàm gọi đến chính nó, người ta gọi phương pháp này là phương pháp đệ quy hoặc quay lui (xem thêm bài viết Đệ quy và giải thuật đệ quy).

Cú pháp:

def tên_hàm(danh_sách_tham_số): if điều_kiện_dừng_thỏa: return giá_trị else: return tên_hàm(danh_sách_đối_số) phép_toán tên_đối_số

* Trong giải thuật này phải có một điều_kiện_dừng_thỏa để đệ quy kết thúc (dừng quay lui).

* phép_toán ở đây là một phép toán bất kỳ phù hợp với bài toán của bạn.

* Chương trình sử dụng đệ quy thì dễ hiểu nhưng hao tốn tài nguyên CPU, dẫn đến làm giảm thời gian chạy chương trình đi nhiều nếu số lần đệ quy của hàm lớn.

Ví dụ 1:

Tính tổng các số chia hết cho 5 nằm trong đoạn [0,N] với N được nhập từ bàn phím.

Phân tích: Điều kiện dừng thỏa ở đây ta có thể thấy được ngay là khi giá trị của đối số bằng 0 (nếu ta chạy ngược giảm dần từ N) hoặc bằng N (nếu ta chạy xuôi tăng dần từ 0). Vì chỉ tính tổng các số chia hết cho 5 nên cứ mỗi lần đệ quy thì ta lại giảm (hoặc tăng) giá trị của đối số 5 đơn vị rồi tiến hành cộng dồn.

Chương trình được viết như sau:

def tinhTong(N): if N<=0: #nếu N==0 return 0 #thì dng đquy else: #nếu không thì return tinhTong(N-5) + N #tiếp tc đquy def main(): #tiến hành nhp N N=int(input("Mi nhp N: ")) while N<1 or N%5!=0: #N phi là t1 trlên và chia hết cho 5 mi hp lN=int(input("Mi nhp N: ")) print("Tng các s t 1 đến",N,"chia hết cho 5 là:", tinhTong(N)) #tiến hành đquy main()

Kết quả:

Mời nhập N: 100 Tổng các số từ 1 đến 100 chia hết cho 5 là: 1050

Ví dụ 2:

Ta có thể lập trình tính giai thừa theo phương pháp đệ quy, vì n!=1*2*3*…(n-1)*n hay n!=n*(n-1)*(n-2)*…*1 --> Giá trị sau chính là giá trị trước cộng thêm 1 (hoặc là giá trị trước trừ đi 1), giá trị kết thúc =1.

Sau đây là phần demo:

def giaiThua(n): if n==0: #điu kin dng tha return 1 #vì 0!=1 nên n==0 là vtrí kết thúc ca đquy return n*giaiThua(n - 1) #kiu n*(n-1)*(n-2)…*1 #hoc: giaiThua(n-1)*n vi kiu 1*2*3*…*n def main(): n=int(input("Nhp n: ")) print("Giai tha ca",n,"là", giaiThua(n)) main()

Ví dụ 3:

In ra n phần tử đầu tiên của dãy Fibonanci (1 1 2 3 5 8 13 21 34 …).

Phân tích: Hai phần tử đầu tiên của dãy là hai phần tử khởi tạo (1 1), bắt đầu từ phần tử thứ ba trở đi sẽ tuân theo quy tắc là phần tử sau bằng tổng của hai phần tử ngay trước nó cộng lại (ví dụ 13=5+8). Công thức: n= (n-1) + (n-2). Như vậy có nghĩa ta sẽ sử dụng được phương pháp đệ quy vì nó tuân theo cú pháp đệ quy.

Chương trình được viết như sau:

def fibo(n): if(n==0 or n==1): #nếu là hai phn tđu tiên ca dãy (điu kin dng tha) return 1 #thì scó giá tr1 return fibo(n-1) + fibo(n-2) #nếu không thì tính giá trca phn tđó def main(): n=int(input("Nhp s phn t cn xem ca dãy Fibonacci: ")) print(n,"phn t đu tiên ca dãy là:") for i in range(0,n): print(fibo(i)) main()

Kết quả:

Nhập số phần tử cần xem của dãy Fibonacci: 10 10 phần tử đầu tiên của dãy là: 1 1 2 3 5 8 13 21 34 55

» Tiếp: List « Trước: Phạm vi của các biến Khóa học qua video: Lập trình Python All Lập trình C# All SQL Server All Lập trình C Java PHP HTML5-CSS3-JavaScript Đăng ký Hội viên Tất cả các video dành cho hội viên Khóa học qua video: Lập trình Python All Lập trình C# All SQL Server All Lập trình C Java PHP HTML5-CSS3-JavaScript Đăng ký Hội viên Tất cả các video dành cho hội viên Copied !!! Copy linkCopied link!
Bạn muốn tìm kiếm điều gì?

Từ khóa » đệ Quy Trong Python Là Gì