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ó m định nghĩa, mỗi định nghĩa dạng:
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ề 1 hoặc 0); biểu thức điều kiện if(C, A, B) (trả A nếu C=0, ngược lại trả B); 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 m đị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 k 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á 500.
Ví dụ (giai thừa):
fact(n) = if(<(n,2), 1, *(n, fact(-(n,1))))
fact(5)
kết quả là 120.
Dòng đầu chứa số nguyên m (1≤m≤20) — số định nghĩa hàm. m 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).
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...