Bạn có thể muốn tham khảo định lý tổng thể để tìm kiếm O lớn của các phương pháp đệ quy. Đây là bài viết wikipedia: http://en.wikipedia.org/wiki/Master_theorem
Bạn muốn nghĩ về một vấn đề đệ quy như một cái cây. Sau đó, hãy xem xét từng cấp độ của cây và lượng công việc cần thiết. Vấn đề thường sẽ rơi vào 3 loại, gốc nặng (lần lặp đầu tiên >> phần còn lại của cây), cân bằng (mỗi cấp có số lượng công việc bằng nhau), lá nặng (last iteration >> phần còn lại của cây).
Đón merge sort là một ví dụ:
define mergeSort(list toSort):
if(length of toSort <= 1):
return toSort
list left = toSort from [0, length of toSort/2)
list right = toSort from [length of toSort/2, length of toSort)
merge(mergeSort(left), mergeSort(right))
Bạn có thể thấy rằng mỗi cuộc gọi của Mergesort lần lượt gọi thêm 2 mergeSorts 1/2 độ dài ban đầu. Chúng tôi biết rằng quy trình hợp nhất sẽ mất thời gian tỷ lệ thuận với số lượng giá trị được hợp nhất.
Mối quan hệ lặp lại sau đó là T (n) = 2 * T (n/2) + O (n). Cả hai đến từ 2 cuộc gọi và n/2 là từ mỗi cuộc gọi chỉ có một nửa số lượng các phần tử. Tuy nhiên, ở mỗi cấp có cùng số phần tử n cần được hợp nhất, do đó công việc liên tục ở mỗi cấp là O (n).
Chúng tôi biết công việc được phân bố đồng đều (O (n) mỗi chiều sâu) và cây là log_2 (n) sâu, do đó, O lớn của hàm đệ quy là O (n * log (n)).
Nguồn
2012-07-31 23:15:08
Điều này thực sự có rất ít để làm với đệ quy, và tất cả mọi thứ để làm với ký hiệu O lớn. Nếu bạn có thể viết nó một cách đệ quy, bạn có thể viết nó theo cách lặp lại – MStodd
@MStodd Không nhất thiết. Hãy thử duyệt qua cây nhị phân một cách lặp lại. – Drise
@Drise Bạn sẽ cần một ngăn xếp, nhưng có thể. Recursion chỉ ẩn ngăn xếp bên trong ngăn xếp cuộc gọi. –