Minh hoạ phương pháp Top-Down: Đệ Quy (Recursion) + Ghi Nhớ (Memoization)
function minPath(r, c) {
// Kiểm tra vi phạm giới hạn lưới
if (r >= ROWS || c >= COLS) return Infinity;
// Base Case: Đã đến ô đích
if (r === ROWS - 1 && c === COLS - 1)
return grid[r][c];
// Memoization: Nếu ô này đã được tính, lấy kết quả luôn
if (memo[r][c] !== null)
return memo[r][c];
// Đệ quy: Thử đi sang PHẢI và đi XUỐNG
let rightCost = minPath(r, c + 1);
let downCost = minPath(r + 1, c);
// Lưu kết quả nhỏ nhất cộng với chi phí tại ô hiện tại
memo[r][c] = grid[r][c] + Math.min(rightCost, downCost);
return memo[r][c];
}