repeatBài tập Recursion - Nâng cao

Bài tập về Đệ quy (Recursion) - Nâng cao

  1. Viết hàm đệ quy flatten(lst) làm phẳng nested list bất kỳ độ sâu.

def flatten(lst):
    # [1, [2, [3, 4], 5], 6] -> [1, 2, 3, 4, 5, 6]
    pass

# Test
nested = [1, [2, [3, 4], 5], 6, [7, [8, 9]]]
print(flatten(nested))
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
circle-info

Gợi ý: Dùng isinstance(item, list) để kiểm tra

  1. Viết hàm đệ quy sum_nested(lst) tính tổng tất cả số trong nested list.

def sum_nested(lst):
    pass

# Test
nested = [1, [2, 3, [4, 5]], 6, [7, [8, 9]]]
print(sum_nested(nested))  # 45
  1. Viết hàm đệ quy binary_search(lst, target) tìm kiếm nhị phân trong list đã sắp xếp.

def binary_search(lst, target, left=0, right=None):
    # Trả về index của target, hoặc -1 nếu không tìm thấy
    pass

# Test
numbers = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(binary_search(numbers, 7))   # 3
print(binary_search(numbers, 11))  # 5
print(binary_search(numbers, 20))  # -1
  1. Viết hàm đệ quy merge_sort(lst) sắp xếp list bằng thuật toán Merge Sort.

circle-info

Chia đôi list, sắp xếp đệ quy từng nửa, rồi merge lại

  1. Viết hàm đệ quy quick_sort(lst) sắp xếp list bằng thuật toán Quick Sort.

  1. Viết hàm đệ quy permutations(lst) tạo tất cả hoán vị của list.

  1. Viết hàm đệ quy combinations(lst, k) tạo tất cả tổ hợp k phần tử.

  1. Viết hàm đệ quy tower_of_hanoi(n, source, target, auxiliary) giải bài toán Tháp Hà Nội.

  1. Viết hàm đệ quy subsets(lst) tạo tất cả tập con (power set) của list.

  1. Viết hàm đệ quy partition(lst, pivot) chia list thành hai phần: nhỏ hơn và lớn hơn pivot.

  1. Viết hàm đệ quy generate_parentheses(n) tạo tất cả các chuỗi ngoặc hợp lệ với n cặp.

circle-info

Theo dõi số ngoặc mở và đóng, đảm bảo hợp lệ

  1. Viết hàm đệ quy path_sum(tree, target) tìm đường đi trong cây có tổng bằng target.

  1. Viết hàm đệ quy count_ways(n) đếm số cách leo n bậc thang (mỗi lần 1 hoặc 2 bậc).

  1. Viết hàm đệ quy word_break(s, word_dict) kiểm tra có thể chia chuỗi thành các từ trong từ điển không.

  1. Viết hàm đệ quy longest_common_subsequence(s1, s2) tìm độ dài LCS.

  1. Viết hàm đệ quy edit_distance(s1, s2) tính khoảng cách chỉnh sửa (Levenshtein distance).

  1. Viết hàm đệ quy n_queens(n) giải bài toán N-Queens.

  1. Viết hàm đệ quy sudoku_solver(board) giải Sudoku.

  1. Viết hàm đệ quy expression_parser(expr) tính giá trị biểu thức toán học.

  1. Viết hàm đệ quy maze_solver(maze, start, end) tìm đường đi trong mê cung.

circle-info

Gợi ý: Dùng backtracking để thử 4 hướng (lên, xuống, trái, phải)

Last updated