Tôi đồng ý với pgaur và rickerbh, độ phức tạp của đệ quy là O (2 ^ n).
Tôi đi đến kết luận tương tự bởi một lý do khá đơn giản nhưng tôi tin rằng vẫn còn lý do hợp lệ.
Đầu tiên, tất cả chỉ là tìm hiểu xem hàm đệ quy (F () kể từ bây giờ) được gọi bao nhiêu lần khi tính số Nth Dailymotion. Nếu nó được gọi một lần cho mỗi số trong dãy 0 đến n, thì chúng ta có O (n), nếu nó được gọi n lần cho mỗi số, thì chúng ta nhận được O (n * n) hoặc O (n ^ 2), và như thế.
Vì vậy, khi F () được gọi cho một số n, số lần F () được gọi cho một số đã cho trong khoảng từ 0 đến n-1 tăng lên khi chúng ta tiếp cận 0.
Theo ấn tượng đầu tiên, đối với tôi, nếu chúng ta đặt nó theo cách trực quan, vẽ một đơn vị mỗi lần F () được gọi cho một số đã cho, ướt sẽ có một hình dạng kim tự tháp (nghĩa là, nếu chúng ta căn giữa các đơn vị theo chiều ngang ). Một cái gì đó như thế này:
n *
n-1 **
n-2 ****
...
2 ***********
1 ******************
0 ***************************
Bây giờ, câu hỏi là, cơ sở của kim tự tháp này mở rộng nhanh như thế nào khi n phát triển?
Hãy lấy một trường hợp thực tế, ví dụ F (6)
F(6) * <-- only once
F(5) * <-- only once too
F(4) **
F(3) ****
F(2) ********
F(1) **************** <-- 16
F(0) ******************************** <-- 32
Chúng ta thấy F (0) được gọi 32 lần, tức là 2 ^ 5, đối với trường hợp mẫu này là 2 ^ (n-1).
Bây giờ, chúng tôi muốn biết F (x) được gọi bao nhiêu lần và chúng tôi có thể thấy số lần F (0) được gọi chỉ là một phần trong số đó.
Nếu chúng ta di chuyển tất cả các dòng * từ F (6) sang F (2) thành dòng F (1), chúng ta sẽ thấy rằng các dòng F (1) và F (0) hiện có độ dài bằng nhau. Có nghĩa là, tổng số lần F () được gọi khi n = 6 là 2x32 = 64 = 2 ^ 6.
Bây giờ, về mặt phức tạp:
O( F(6) ) = O(2^6)
O( F(n) ) = O(2^n)