Consider the following function:

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

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 2 1". Hàm lấy m bằng n chia nguyên cho 3 và k bằng n chia 3 lấy dư, in k trước rồi mới gọi đệ quy với m, nên chuỗi in ra là các chữ số dư của phép đổi 17 sang cơ số 3 đọc từ thấp lên cao. Gọi fun(17): m bằng 5, k bằng 2, in 2; fun(5): m bằng 1, k bằng 2, in 2; fun(1): m bằng 0, k bằng 1, in 1, và vì m không lớn hơn 0 nên dừng. "2 0 2 1" chèn thêm một chữ số 0, chỉ có nếu một lần gọi nào đó cho dư 0, nhưng ba lần gọi cho dư lần lượt 2, 2, 1. "1 0 0 1" có bốn chữ số nên cần bốn lần chia, trong khi 17 chia cho 3 ba lần đã về 0, và dư đầu tiên của 17 là 2 chứ không phải 1. "1 2 2" là kết quả đọc ngược, chỉ xảy ra nếu lệnh in đặt sau lời gọi đệ quy. "2 0 1" dừng sớm một bước so với điều kiện m lớn hơn 0.

Cùng phần 3

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