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;
   if (m > 0)
    {fun(m);
    }
   System.out.print(k + " ");
  }

What is the output when the statement fun(11); 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: "1 0 1 1". Hàm gọi đệ quy TRƯỚC khi in, nên các chữ số dư được in theo thứ tự ngược với lúc sinh ra, đúng bằng cách đổi 11 sang hệ hai. Chạy tay: fun(11) có m = 11/2 = 5 và k = 11%2 = 1, m lớn hơn 0 nên gọi fun(5); fun(5) có m = 2, k = 1, gọi fun(2); fun(2) có m = 1, k = 0, gọi fun(1); fun(1) có m = 0, k = 1, m không lớn hơn 0 nên dừng rồi in 1. Khi các lời gọi lần lượt trở về, màn hình nhận thêm 0 của fun(2), rồi 1 của fun(5), rồi 1 của fun(11), cho dãy 1 0 1 1 — chính là biểu diễn hệ hai của 11. "1 1 0 1" là dãy dư theo chiều sinh ra, chỉ xảy ra nếu đặt lệnh in trước lời gọi đệ quy. "1 0 0 1" là hệ hai của 9 và "1 0 1 0" là hệ hai của 10, đều không khớp với 11.

Cùng phần 3

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