Mình viết bài này 25/02/2019 trong lúc giải bài tập để ghi nhớ và ứng dụng đệ quy trong javascript. Do đó có thể không đúng nhưng mục đích là để ghi chú lại trong quá trình thực hành:

Hàm đệ quy là gì?

Hàm đệ quy (recursion)  là hàm gọi chính bản thân nó. Hàm gọi đệ quy là một công cụ mạnh trong lập trình khi giải quyết những vần đề lớn; với vấn đề lớn, một cách giải quyết là chia nhỏ nó thành những vấn đề tương tự nhưng nhỏ hơn và ta có thể cho hàm gọi lại chính nó với để giải quyết những vấn đề nhỏ hơn này.

Ứng dụng trong javascript

Trong Javascript chúng ta có thể sử dụng vòng lặp (for …in , for…of) để giải bài toán hàm đệ quy. Bài toán:

/**
* Sử dụng vòng lặp for…in để in ra tất cả các key trong object sau, in ra cả các key của các nested object (object con lồng bên trong object lớn)
* Gợi ý: đây là bài tập khó, bạn nên tìm hiểu về recursive trước
*/
var apartment = {
bedroom: {
area: 20,
bed: {
type: ‘twin-bed’,
price: 100
}
}
};
/**
* Kết quả mong muốn:
* bedroom
* area
* bed
* type
* price
* Chú ý: không cần hiển thị ra đúng thứ tự như trên
*/
function dequy(obj) {
for(var key in obj) {
console.log(key);
if(typeof obj[key] === ‘object’){
dequy(obj[key]);
}
}
};
dequy(apartment);

Hàm typeof được dùng để kiểm tra một biến nào đó (hoặc một giá trị nào đó) có kiểu dữ liệu là gì? Cú pháp của nó khá đơn giản như sau:

1
var x = typeof value;

Trong đó value có thể là một biến hoặc một giá trị xác định.

Thông thường chúng ta có một số loại dữ liệu như sau:

  • number – số
  • string – chuỗi
  • object – đối tượng
  • undefined – không xác định

Trong bài này chún ta sử dụng value là ‘object’.

Trong một số trường hợp, đệ quy tương tự như một vòng lặp. Cả hai đều thực hiện cùng một mã nhiều lần, Và cả hai đều yêu cầu một điều kiện ( Để tránh một vòng lặp vô hạn, hoặc đúng hơn, đệ quy vô hạn trong trường hợp này ). Khi có quá nhiều hoặc vô hạn đệ quy, JavaScript sẽ ném lỗi này.

 

LEAVE A REPLY

Please enter your comment!
Please enter your name here