Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Thông dịch ngôn ngữ hàm đệ quy đơn giản

    Cho một tập định nghĩa hàm của một "ngôn ngữ mini" thuần hàm, một tham số. Có mmm định nghĩa, mỗi định nghĩa dạng: ten_ham(tham_so) = bieu_thuc\texttt{ten\_ham(tham\_so) = bieu\_thuc}ten_ham(tham_so) = bieu_thuc trong đó bieu_thuc chỉ gồm: số nguyên không âm; tên tham số; các phép toán hai ngôi viết ở dạng tiền tố +(e1,e2), -(e1,e2), *(e1,e2), /(e1,e2) (/ là chia lấy phần nguyên làm tròn về 0, mẫu luôn khác 0); phép so sánh <(e1,e2), >(e1,e2), =(e1,e2) (trả về 111 hoặc 000); biểu thức điều kiện if(C, A, B) (trả AAA nếu C≠0C \neq 0C=0, ngược lại trả BBB); và lời gọi hàm ten_ham(e) — có thể gọi chính nó (đệ quy) hoặc một hàm đã/sẽ được định nghĩa trong tập mmm định nghĩa. Không có số âm viết trực tiếp trong biểu thức (số âm, nếu cần, được tạo bằng phép trừ, ví dụ -(0,5)).

    Dòng cuối cùng của input là một lời gọi cần tính giá trị, dạng ten_ham(k) với kkk là một số nguyên không âm cụ thể. Đề đảm bảo mọi phép đệ quy đều dừng, với độ sâu đệ quy thực tế không vượt quá 500500500.

    Ví dụ (giai thừa):

    fact(n) = if(<(n,2), 1, *(n, fact(-(n,1))))
    fact(5)
    

    kết quả là 120120120.

    • Định dạng đầu vào:

      Dòng đầu chứa số nguyên mmm (1≤m≤201 \le m \le 201≤m≤20) — số định nghĩa hàm. mmm dòng tiếp theo, mỗi dòng một định nghĩa hàm đúng cú pháp ten_ham(tham_so) = bieu_thuc (dấu = phân tách phần đầu và thân hàm luôn có đúng một khoảng trắng ở mỗi bên). Dòng cuối cùng là lời gọi cần tính, dạng ten_ham(k).

    • Định dạng đầu ra:

      In ra một số nguyên duy nhất — giá trị của lời gọi hàm được yêu cầu.

    Ví dụ:

    Đầu vào:

    1
    fact(n) = if(<(n,2), 1, *(n, fact(-(n,1))))
    fact(0)
    

    Đầu ra:

    1
    

    Đầu vào:

    1
    fact(n) = if(<(n,2), 1, *(n, fact(-(n,1))))
    fact(5)
    

    Đầu ra:

    120
    

    Đang tải editor...