Consider the following function:

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

What is the output when the statement fun(12); 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: "0 0 1 1". Hàm tính m = n/2 theo phép chia nguyên và k = n%2, in k TRƯỚC rồi mới gọi đệ quy khi m > 0, nên các chữ số hiện ra theo chiều từ bit thấp lên bit cao. Chạy fun(12): m = 6, k = 0 nên in 0; fun(6): m = 3, k = 0 nên in 0; fun(3): m = 1, k = 1 nên in 1; fun(1): m = 0, k = 1 nên in 1 rồi m = 0 nên dừng. Dãy in ra là 0 0 1 1. Phương án "1 1 0 0" chính là biểu diễn nhị phân 1100 của 12 đọc theo chiều quen thuộc từ bit cao, tức kết quả nếu lệnh in được đặt SAU lời gọi đệ quy; ở đây in đứng trước nên thứ tự đảo lại. Phương án "1 0 1 0" là dãy số dư của 10 chứ không của 12. Phương án "1 0 1 1" đòi số dư đầu tiên của 12 phải là 1, nhưng 12 chẵn nên 12%2 = 0. Vị trí của lệnh in so với lời gọi đệ quy là điều quyết định ở đây, không phải phép chia.

Cùng phần 3

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