Mảng đối tượng đệ quy JavaScript
Trong toán học, ngôn ngữ học và nghệ thuật, đệ quy đề cập đến sự xuất hiện của một thứ được xác định theo chính nó. Trong khoa học máy tính, đệ quy đề cập đến một chức năng gọi chính nó. Các hàm đệ quy giải các bài toán phức tạp thông qua phương pháp “chia để trị” (một phương pháp giải các bài toán bao gồm giải các phần nhỏ hơn của cùng một bài toán cho đến khi bạn giải được bài toán ban đầu, lớn hơn. ) Show
Đệ quy chắc chắn là một trong những khái niệm lâu đời nhất trong lập trình. Đó là mô hình mà một chức năng gọi chính nó. Kỹ thuật này thường được sử dụng để giải các bài toán yêu cầu chia chúng thành các bài toán con nhỏ hơn. Trong bài viết này, chúng tôi sẽ thảo luận về đệ quy và hiển thị các ví dụ về ứng dụng của nó Hai trường hợp cơ bảnĐể các hàm đệ quy được triển khai chính xác, chúng phải có hai trường hợp, để tránh tràn Stack và tính toán kết thúc chính xác trường hợp cơ sởTrường hợp cơ sở (còn được gọi là trường hợp kết thúc) ngăn một hàm gọi chính nó khi đạt đến một điều kiện nhất định Ví dụ: kiểm tra chức năng sau, in các số đếm ngược từ n đến 0
đầu ra
Trong đoạn mã trước, trường hợp cơ sở là khi 4 nhỏ hơn 5 vì chúng tôi muốn dừng đếm tại 5. Nếu một số âm được đưa ra làm đầu vào, hàm 7 sẽ không in số đó vì trường hợp cơ bảntrường hợp đệ quyTrinh bay đơn giản. Chức năng của chúng tôi đang gọi chính nó. Trong ví dụ về 7, 9; Ngăn xếp cuộc gọi và đệ quyKhi một hàm gọi chính nó theo cách đệ quy, nó sẽ được thêm vào ngăn xếp cuộc gọi. Ngăn xếp là cấu trúc LIFO (Last In, First Out), nghĩa là mục cuối cùng được thêm vào ngăn xếp là mục đầu tiên sẽ bị xóa khỏi ngăn xếp sau đó Hãy xem cách Stack xử lý hàm đệ quy 7 của chúng ta
Đây là lý do tại sao một trường hợp cơ sở là rất quan trọng. không có trường hợp cơ sở, vòng lặp vô hạn sẽ gây tràn ngăn xếp Phát lại phiên dành cho nhà phát triểnKhám phá sự thất vọng, hiểu lỗi và khắc phục sự cố chậm hơn bao giờ hết với OpenReplay — bộ phát lại phiên mã nguồn mở dành cho nhà phát triển. Nó có thể tự lưu trữ trong vài phút, cho phép bạn kiểm soát hoàn toàn dữ liệu khách hàng của mình Chúc mừng gỡ lỗi. Hãy thử sử dụng OpenReplay ngay hôm nayÁp dụng đệ quyTrong lập trình, tất cả các vấn đề có thể được giải quyết bằng cách tiếp cận đệ quy cũng có cách tiếp cận lặp lại có thể được sử dụng để giải quyết chúng. Điều đó đang được nói, đối với nhiều vấn đề đệ quy cung cấp một giải pháp dễ dàng hơn nhiều. Một ví dụ đang làm việc với cấu trúc cây, chẳng hạn như các đối tượng được lồng sâu Đọc một trường lồng sâuGiả sử chúng ta có một đối tượng như sau và chúng ta muốn truy cập vào một trường được lồng sâu bên trong đối tượng
đầu ra
Chúng tôi muốn đọc 1 của 2. Chúng ta phải viết 3. Và, tất nhiên, nếu một số dữ liệu bị thiếu, chúng tôi sẽ nhận được 4Để giải quyết vấn đề này, chúng tôi sử dụng những người trợ giúp như phương pháp 5 của lodash
Tiện ích này sẽ cố đọc giá trị một cách an toàn và trả về chuỗi 6 nếu nó không tồn tạiĐây là cách triển khai một tiện ích như vậy có thể trông như thế nào khi sử dụng hàm đệ quy
đầu ra
Lưu ý cách 5 gọi chính nó theo cách đệ quy cho đến khi nó đến phần cuối cùng của đường dẫn. Ngoài ra, tham số 8 được trả về khi chúng ta cố đọc một giá trị không tồn tại— 9 trả về 4, đây là giá trị mặc định khi không cung cấp ____8_______8. Khi một 8 được cung cấp, giá trị được cung cấp được trả về— 3 trả về 4Tạo một bản sao sâu của một đối tượngTheo
Hãy xem cách tạo một bản sao sâu của một đối tượng bằng cách sử dụng đệ quy
Trong đoạn mã trước 5 là một hàm đệ quy. Nó tạo một bản sao sâu của một đối tượng được truyền tới nó thông qua đối số 6 của nótrường hợp cơ sở 0Trong đoạn mã trước, nếu 6 là kiểu nguyên thủy (chuỗi, số, v.v. ) hoặc bằng giá trị 8 mà nó được trả về, điều này đảm bảo chỉ những đối tượng không phải là 8 mới được chuyển vào làm đầu vàotrường hợp đệ quy 1Đối với trường hợp đệ quy
Về cơ bản, chúng tôi đang gọi đệ quy hàm 5 cho từng phần tử trong đối tượng tham chiếu của chúng tôi (đối tượng mà chúng tôi đang sao chép từ đó). Nếu kiểu dữ liệu của phần tử là nguyên thủy, nó sẽ được trả về nguyên trạng; Ví dụ: hãy chuyển một đối tượng vào hàm 5 để lấy bản sao sâu tương đương của nó 2đầu ra 3Trong mã trước, chúng tôi có thể xác minh rằng đối tượng được chuyển vào 5 thực sự được sao chép. Từ đầu ra, các giá trị đã thay đổi trong đối tượng 8 không được phản ánh trong đối tượng mà chúng được sao chép từ đó( 9). Xem bản demo tại đâyPhần kết luậnVới hiểu biết cơ bản về đệ quy, giờ đây nó có thể được sử dụng như một phần trong kho vũ khí giải quyết vấn đề của bạn với tư cách là nhà phát triển—đặc biệt đối với các vấn đề yêu cầu chia chúng thành các bài toán con nhỏ hơn
|