Hiểu công thức đệ quy và đệ quy

Lặp lại

Lặp lại là sự lặp lại của một quá trình. Một học sinh đi học lặp lại quá trình đi học hàng ngày cho đến khi tốt nghiệp. Chúng tôi đi đến cửa hàng tạp hóa ít nhất một lần hoặc hai lần một tháng để mua sản phẩm. Chúng tôi lặp lại quá trình này mỗi tháng. Trong toán học, một dãy Fibonacci tuân theo các thuộc tính của việc lặp lại nhiệm vụ. Hãy xem xét dãy Fibonacci trong đó hai số đầu tiên là 0 và 1, tất cả các số khác là tổng của hai số trước đó.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89

Lặp lại các bước

Công thức Fibonacci có thể được viết là,

F (n) = F (n - 1) + F (n - 2)
fibonacci (0) = 0
fibonacci (1) = 1
fibonacci (2) = fibonacci (1) + fibonacci (0) = 1 + 0 = 1
fibonacci (3) = fibonacci (2) + fibonacci (1) = 1 + 1 = 2
fibonacci (4) = fibonacci (3) + fibonacci (2) = 2 + 1 = 3
fibonacci (5) = fibonacci (4) + fibonacci (3) = 3 + 2 = 5
fibonacci (6) = fibonacci (5) + fibonacci (4) = 5 + 3 = 8

Thuật toán đưa ra dưới đây trả về số Fibonacci thứ n.

Đệ quy

Mỗi lần chúng ta nhận được một số Fibonacci mới (số thứ n) là số thứ n thực sự là số (n - 1) khi chúng ta tìm thấy (n + 1) Fibonacci thứ hai là Fibonacci thứ hai tiếp theo của chúng ta. Như chúng ta thấy các bước lặp lại đã đề cập ở trên: nếu n = 2 thì
fibonacci (2) = fibonacci (2 - 1) + fibonacci (2 - 2) = fibonacci (1) + fibonacci (0) = 1 + 0 = 1

Bây giờ, chúng tôi muốn tạo ra (3), đó là n = 3.

fibonacci (3) = fibonacci (3 - 1) + fibonacci (3 - 2) = fibonacci (2) + fibonacci (1) = 1 + 1 = 2
Điều đó có nghĩa, mỗi lần n tăng giá trị của (n - 1) thứ và (n - 2) th cũng tăng. Nhưng nó là mệt mỏi để theo dõi (n - 1) th và (n - 2) th fibonacci cho mỗi n. Làm thế nào về việc viết một phương thức tự gọi chính nó để lặp lại nhiệm vụ lặp lại của chính nó?

Một phương thức tự gọi là phương thức đệ quy. Một phương thức đệ quy phải có một trường hợp cơ sở mà chương trình ngừng tự gọi nó. Trường hợp cơ bản của chúng tôi cho Fibonacci series là fibonacci (0) = 0 và fibonacci (1) = 1. Nếu không, phương thức Fibonacci tự gọi hai lần - fibonacci (n - 1) và fibonacci (n - 2). Sau đó, nó thêm chúng để có được fibonacci (n). Một phương pháp đệ quy để tìm Fibonacci thứ n có thể được viết là -

Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây

Nếu chúng ta xem xét cẩn thận, đệ quy theo tài sản của ngăn xếp. Nó giải quyết các vấn đề nhỏ hơn để có được giải pháp của một vấn đề. Đối với n> 1, nó thực hiện dòng cuối cùng. Vì vậy, nếu n = 6, Hàm này gọi và thêm fibonacci (6 - 1) và fibonacci (6 - 2). fibonacci (6 - 1) hoặc fibonacci (5) các cuộc gọi và thêm fibonacci (5 - 1) và fibonacci (5 - 2). Điều này đệ quy tiếp tục cho đến khi 6 đạt đến giá trị trường hợp cơ sở của nó là fibonacci (0) = 0 hoặc fibonacci (1) = 1. Một khi nó chạm trường hợp cơ sở, nó thêm hai giá trị cơ sở và tăng lên cho đến khi nó nhận được giá trị của fibonacci ( 6). Dưới đây là một biểu diễn cây của đệ quy.

cây đệ quy

Như chúng ta có thể thấy, một đệ quy mạnh mẽ có thể như thế nào. Chỉ có một dòng mã duy nhất là làm cho cây phía trên (dòng cuối cùng của mã ở trên bao gồm các trường hợp cơ sở). Đệ quy duy trì một ngăn xếp và nó đi sâu hơn cho đến khi nó đạt đến trường hợp cơ bản. Lập trình động (DP): Việc đệ quy dễ hiểu và dễ hiểu nhưng có thể tốn kém về mặt thời gian và bộ nhớ. Hãy nhìn vào cây đệ quy bên dưới. Các subtree trái bắt đầu với fib (4) và subtree quyền bắt đầu với fib (4) là chính xác giống nhau. Chúng tạo ra cùng một kết quả là 3 nhưng thực hiện cùng một tác vụ hai lần. Nếu n là một số lớn (ví dụ: 500000) thì đệ quy có thể làm cho một chương trình rất chậm vì nó sẽ gọi cùng một nhiệm vụ phụ nhiều lần.

đệ quy Tree-circled

Để tránh vấn đề này, lập trình động có thể được sử dụng. Trong lập trình động, chúng ta có thể sử dụng subtask đã được giải quyết trước đó để giải quyết nhiệm vụ tương lai cùng loại. Đây là một cách để giảm nhiệm vụ để giải quyết vấn đề ban đầu. Chúng ta hãy có một mảng fib [], nơi chúng ta lưu trữ các giải pháp subtask đã được giải quyết trước đó. Chúng ta đã biết rằng fib [0] = 0 và fib [1] = 1. Hãy lưu trữ hai giá trị này. Bây giờ, giá trị của fib [2] là gì? Khi fib [0] = 0 và fib [1] = 1 đã được lưu trữ, chúng ta chỉ cần nói fib [2] = fib [1] + fib [0] và đó là tất cả. Chúng ta có thể tạo ra fib [3], fib [4], fib [5], fib [n] theo cách tương tự. Các nhiệm vụ phụ đã được giải quyết trước đây đang được gọi để có được các nhiệm vụ phụ tiếp theo cho đến khi tác vụ gốc chưa được giải quyết, do đó làm giảm tính toán dự phòng.

Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây

Facebook Twitter Google Plus Pinterest