Bản tóm tắt. trong hướng dẫn này, bạn sẽ tìm hiểu về các hàm đệ quy Python và cách sử dụng chúng để đơn giản hóa mã của bạn
Giới thiệu về hàm đệ quy
Một hàm đệ quy là một hàm gọi chính nó cho đến khi nó không
Hàm
3 sau đây là hàm đệ quy vì nó có lời gọi đến chính nóCode language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Code language: Python [python]
def fn[]: # ... fn[] # ...
Trong hàm
3,Code language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
5 có nghĩa là mã khácCode language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Ngoài ra, một hàm đệ quy cần có một điều kiện để ngừng gọi chính nó. Vì vậy, bạn cần thêm một câu lệnh if như thế này
Code language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Thông thường, bạn sử dụng hàm đệ quy để chia một bài toán lớn khó giải thành các bài toán nhỏ dễ giải hơn
Trong lập trình, bạn sẽ thường thấy các hàm đệ quy được sử dụng trong cấu trúc dữ liệu và thuật toán như cây, đồ thị và tìm kiếm nhị phân
Ví dụ hàm đệ quy Python
Hãy lấy một số ví dụ về việc sử dụng các hàm đệ quy Python
1] Một ví dụ về hàm đệ quy đơn giản trong Python
Giả sử bạn cần phát triển chức năng đếm ngược đếm ngược từ một số cụ thể về 0
Ví dụ: nếu bạn gọi hàm đếm ngược từ 3, nó sẽ hiển thị đầu ra sau
Code language: Python [python]
3 2 1
Phần sau định nghĩa hàm
6Code language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Code language: Python [python]
def count_down[start]: """ Count down from a number """ print[start]
Nếu bạn gọi hàm
6 ngay bây giờCode language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
count_down[3]
Code language: Python [python]
…nó sẽ chỉ hiển thị số 3
Để hiển thị các số 3, 2 và 1, bạn cần phải
- Đầu tiên, gọi số _______ 8 để hiển thị số 3
- Thứ hai, gọi số
9 để hiển thị số 2
Code language: Python [python]def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
- Cuối cùng, gọi
0 để hiển thị số 1
Code language: Python [python]3 2 1
Để làm như vậy, bên trong hàm
6, bạn sẽ cần xác định logic để gọi hàmCode language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
6 với đối số 2 và 1Code language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Để làm điều đó, bạn cần thực hiện đệ quy hàm
6Code language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Phần sau đây định nghĩa một hàm
6 đệ quy và gọi nó bằng cách chuyển số 3Code language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Code language: Python [python]
def count_down[start]: """ Count down from a number """ print[start] count_down[start-1] count_down[3]
Nếu bạn thực hiện chương trình, bạn sẽ thấy lỗi sau
Code language: Python [python]
RecursionError: maximum recursion depth exceeded while calling a Python object
Lý do là
6 tự gọi vô thời hạn cho đến khi hệ thống dừng nóCode language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
Vì bạn cần ngừng đếm ngược khi số về 0. Để làm như vậy, bạn thêm một điều kiện như thế này
Code language: Python [python]
def count_down[start]: """ Count down from a number """ print[start] # call the count_down if the next # number is greater than 0 next = start - 1 if next > 0: count_down[next] count_down[3]
đầu ra
Code language: Python [python]
3 2 1
Trong ví dụ này, hàm
6 chỉ gọi chính nó khi số tiếp theo lớn hơn 0. Nói cách khác, nếu số tiếp theo bằng 0, nó sẽ ngừng gọi chính nóCode language: Python [python]
def fn[]: # ... if condition: # stop calling itself else: fn[] # ...
2] Sử dụng hàm đệ quy để tính tổng của một dãy số
Giả sử rằng bạn cần tính tổng của một dãy e. g. , từ 1 đến 100. Một cách đơn giản để làm điều này là sử dụng vòng lặp for với hàm range[]