Hàm đệ quy tự gọi chính nó với mảng cắt bỏ phần tử đầu (slice(1)), điều kiện dừng khi mảng rỗng.
Ví dụ
function countRecursive(arr) {
if (arr.length === 0) return 0; // Base case
return 1 + countRecursive(arr.slice(1)); // Recursive case
}
var marks = [56, 78, 90, 94, 91, 82, 77];
console.log("Mảng:", marks);
console.log("Số phần tử:", countRecursive(marks));
Cách chạy
node demo.js
Kết quả
Mảng: [ 56, 78, 90, 94, 91, 82, 77 ]
Số phần tử: 7
⚠️ Cảnh báo: Đệ quy tạo mảng mới mỗi lần slice(1) - tốn bộ nhớ O(n²), gây stack overflow cho mảng lớn. Chỉ dùng để học tập. Thực tế dùng arr.length.
Tail recursion (tối ưu): JS engine hiện tại chưa tối ưu tail call.