Đệ quy trực tiếp và gián tiếp trong Python là gì?
Đệ quy là một quá trình lặp đi lặp lại một quá trình cho đến khi một điều kiện được đáp ứng. Trong lập trình, quá trình này được lặp lại dưới dạng gọi hàm Show
Vì vậy, trong ngữ cảnh lập trình đệ quy là một quá trình trong đó một hàm được gọi chính nó cho đến khi một điều kiện được đáp ứng. Các hàm này được gọi là hàm đệ quy cần đệ quyĐệ quy được sử dụng để giải quyết các vấn đề có thể được giải quyết bằng cách gọi lặp lại cùng một chức năng. Nó chia bài toán thành các bài toán con nhỏ hơn và sau đó giải đệ quy từng bài toán con đó Bất kỳ vấn đề nào có thể được chia thành các vấn đề con nhỏ hơn đều có thể được giải quyết bằng đệ quy Ví dụ: nếu chúng ta gặp sự cố khi tìm chuỗi fibbonacci, hãy viết nó là 2, trong đó 3 là hàm trả về chuỗi fibbonacciThuộc tính của đệ quyĐệ quy có các tính chất sau
Cách đệ quy được sử dụng trong lập trìnhĐệ quy được triển khai trong các ngôn ngữ lập trình bằng cách sử dụng các hàm. Trong các ngôn ngữ lập trình, hàm là một khối mã được sử dụng để thực hiện một tác vụ cụ thể. Bất kỳ ngôn ngữ lập trình nào như C, C++, Java, Python, v.v. có thể sử dụng các hàm và triển khai khái niệm về đệ quy . Chúng ta phải hết sức cẩn thận khi viết hàm đệ quy bằng ngôn ngữ lập trình. Đảm bảo rằng trường hợp cơ sở được viết đúng nếu không nó sẽ gây ra đệ quy vô hạn điều kiện cơ sởTrong mọi hàm đệ quy, có một điều kiện cơ sở được sử dụng để dừng đệ quy. Ở điều kiện cơ sở, hàm phải trả về một giá trị cần thiết để giải quyết lệnh gọi hàm trước đó Giải pháp được chuyển trong ngăn xếp cuộc gọi từ điều kiện cơ sở đến lệnh gọi hàm trước đó và cuối cùng, chúng ta có giải pháp cuối cùng Sử dụng bộ nhớKhi chức năng chính của chương trình được gọi, bộ nhớ được phân bổ cho chức năng trên ngăn xếp cuộc gọi. Bộ nhớ bị giải phóng khi hàm trả về Trong trường hợp đệ quy, khi hàm được gọi theo cách đệ quy, hàm mới được phân bổ ở trên cùng của ngăn xếp cuộc gọi. Và điều tương tự xảy ra lặp đi lặp lại cho đến khi điều kiện cơ bản được đáp ứng Khi chúng tôi đạt đến điều kiện cơ sở, bộ nhớ bắt đầu phân bổ từ đầu ngăn xếp cuộc gọi khi chúng tôi nhận được giá trị trả về của hàm Việc sử dụng bộ nhớ của đệ quy là O(n) trong đó n là số lần hàm được gọi
Đệ quy trực tiếp và gián tiếpCác hàm đệ quy này có thể có hai loại
Hàm đệ quy trực tiếp là hàm gọi chính nó trực tiếp mà không có bất kỳ hàm nào khác gọi nó. Trong khi đó Hàm đệ quy gián tiếp là một hàm gọi một hàm khác gọi chính nó làm cho nó trở thành một hàm đệ quy gián tiếp Đây là một ví dụ đơn giản để chỉ ra sự khác biệt giữa đệ quy trực tiếp và gián tiếp
Đệ quy đuôi và không đuôiĐệ quy đuôi là một hàm đệ quy được gọi ở cuối lệnh gọi hàm. Đệ quy không đuôi là một hàm đệ quy được gọi khi bắt đầu gọi hàm Bạn có thể đang nghĩ tại sao cuộc gọi đệ quy được thực hiện ở đâu lại quan trọng như vậy?🤔 Lý do là đệ quy đuôi tốt hơn đệ quy không đuôi. Bởi vì chúng ta biết hàm đệ quy tạo một ngăn xếp khi lời gọi hàm đệ quy là câu lệnh cuối cùng trong hàm, sau đó không cần lưu địa chỉ của nó vào ngăn xếp và nó sẽ được bật ra khỏi ngăn xếp làm cho nó nhanh hơn Ví dụ về đệ quyDưới đây là một số ví dụ về đệ quy
yếu tốGiai thừa của một số là tích của tất cả các số từ 1 đến số đó. Ví dụ, giai thừa của 5 là 5 * 4 * 3 * 2 * 1 = 120 Đây là chương trình tìm giai thừa của một số bằng cách sử dụng đệ quy
________số 8_______ đầu ra Enter a number: 5 120 Tìm kiếm nhị phânTìm kiếm nhị phân là một thuật toán tìm kiếm hoạt động bằng cách so sánh giá trị của phần tử ở giữa của mảng với giá trị được tìm kiếm. Nếu giá trị nhỏ hơn phần tử ở giữa, thì tìm kiếm tiếp tục ở nửa dưới của mảng. Nếu giá trị lớn hơn phần tử ở giữa, thì tìm kiếm tiếp tục ở nửa trên của mảng. Điều này tiếp tục cho đến khi giá trị được tìm thấy hoặc tìm kiếm kết thúc Đệ quy trực tiếp và gián tiếp là gì?Sự khác biệt giữa đệ quy trực tiếp và gián tiếp là gì? . Một hàm fun được gọi là đệ quy gián tiếp nếu nó gọi một hàm khác chẳng hạn fun_new và fun_new gọi fun trực tiếp hoặc gián tiếp
Đệ quy trực tiếp là gì?Nếu một hàm gọi chính nó , nó được gọi là đệ quy trực tiếp. Điều này dẫn đến một cuộc gọi đệ quy một bước. hàm thực hiện một cuộc gọi đệ quy bên trong thân hàm của chính nó.
Các loại đệ quy khác nhau trong Python là gì?Chúng có hai loại. đệ quy gián tiếp và trực tiếp .
Đệ quy gián tiếp trong lập trình là gì?Đệ quy gián tiếp xảy ra khi một hàm không được gọi bởi chính nó mà bởi một hàm khác mà nó đã gọi (trực tiếp hoặc gián tiếp) . Ví dụ: nếu f gọi f, đó là đệ quy trực tiếp, nhưng nếu f gọi g gọi f, thì đó là đệ quy gián tiếp của f. |