Consider the following function:

5 phương ánCó giải thích
Đề bài
void fun(int n)
   {if(n > 0)
       {System.out.print("  " + n % 5);
        fun(n/3);
       }
   }

What is the output when the statement fun(17); is run?

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "2 0 1". Hàm in trước rồi mới gọi đệ quy, nên các số dư hiện ra theo chiều đi xuống: fun(17) in 17%5 = 2 rồi gọi fun(17/3) = fun(5); fun(5) in 5%5 = 0 rồi gọi fun(5/3) = fun(1); fun(1) in 1%5 = 1 rồi gọi fun(0), và fun(0) dừng vì điều kiện n lớn hơn 0 không còn đúng. Chuỗi in ra vì vậy là 2 0 1. Dãy "2 1" bỏ mất bước fun(5), tức coi 17/3 bằng 1 thay vì 5. Dãy "2 2 1" lấy số dư theo cơ số 3 ở bước giữa vì 5%3 = 2, trong khi lệnh in dùng cơ số 5. Dãy "2 1 2" đảo thứ tự, nhưng lệnh in đứng trước lời gọi đệ quy nên số dư của n lớn nhất phải ra đầu tiên. Dãy "3 1 1" bắt đầu bằng 17/5 = 3 chứ không phải 17%5 = 2, tức lẫn giữa phép chia và phép lấy dư.

Cùng phần 3

Xuất hiện trong 1 bộ đề