Vẽ Flowchart với hàm con và đệ quy

Chào mn, Hiện tại mình đang học môn Kiến trúc máy tính ( code trên kiến trúc MIPS).
Mình thắc mắc là vẽ lưu đồ thuật toán với những hàm đệ quy và hàm con như thế nào ?
Đặt biệt là đệ quy + lệnh nhảy trong MIPS ( jal và jr $ra ) mình không biết phải biểu diễn trên lưu đồ như thế nào?
Mong mọi người giúp đỡ

Ohm, cậu biết vẽ flow chat thông thường rồi đúng không?
Flowchat chỉ ra luồng thực hiện của cậu, để mô tả ý tưởng trước khi implement. Cậu không cần vẽ flowchat cho từng lệnh của MIPS đâu.
Còn về cách vẽ, đệ quy thì cậu vẽ giống như loop (nó là vòng lặp mà :smile:). Lệnh nhảy được coi là thực hiện 1 step mới thôi (vì cậu nhảy sang 1 hàm khác = thực hiện 1 công việc mới). Nếu nhảy dưới một condition xác định, thì cậu vẽ điều kiện rẽ nhánh thông thường (make sense đúng không?).

Hope it helps!

4 Likes

Mình nghĩ đệ quy trong MIPS khác với loop, mình dùng đệ quy nhiều lần và lưu giá trị của $ra vào Stack sau đó lần lượt pop ra để dùng nên lệnh nhảy khó biểu diễn. Cụ thể mình đang làm bài liệt kê n số đầu tiên của dãy Fibonacci ( dùng đệ quy ) … Phần code thì mình hoàn thiện xong, nhưng làm file báo cáo thì khá lúng túng ở khâu Flowchart :frowning:

Đệ quy không phải concept gắn với ngôn ngữ đâu cậu :sweat_smile:
Khi cậu implement bằng MIPS, cậu rollback tất cả thanh ghi, thay đổi các thanh ghi argument, rồi jump tới đúng label procedure mà cậu đang ở. Nhưng, khi cậu diễn giải ý tưởng, nó vẫn là “sinh ra số fibonacci tiếp theo cho tới khi đủ tưng đó số”, và đó là loop rồi :sweat_smile:
Nếu cậu muốn highlight ý tưởng trong báo cáo “em sử dụng đệ quy đấy”, cậu hoàn toàn có thể đánh dấu step đó (*), rồi note ở dưới:

(*) Bước này sử dụng đệ quy để cài đặt.

Cậu hoàn toàn có thể thêm các đặc tả vào từng thủ tục khi báo cáo. Flowchat chỉ giúp cậu mô phỏng các bước, không mô phỏng được cách implement đâu :sweat_smile: (kiểu như cậu không thể nói rõ cậu sẽ implement dùng if-else hay switch case, hoặc dùng for hay while loop, hay đệ quy… Cái đó không cải concern của flowchat).
Tớ recommend cậu vẽ một flowchat để mô tả ý tưởng, rồi đặc tả chi tiết từng thủ tục, với đầu vào, đầu ra, cách implement, etc. Nó sẽ giúp báo cáo của cậu trông well-organize hơn, và dễ hiểu hơn.

Thực ra, cậu hoàn toàn có thể khử đệ quy để chuyển nó về implement loop thông thường. Ý tưởng vẫn là “lặp liên tục cho tới khi gặp điều kiện nào đó thì dừng” :sweat_smile:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?