Consider the following function:

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

What is the output when the statement foo(13); 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 1 0 1". Mỗi tầng tính m bằng n/2, k bằng n%2, gọi foo(m) khi m còn lớn hơn 0 rồi mới in k, nên các chữ số dư được in theo chiều quay về, từ tầng sâu nhất ra ngoài. foo(13) có k bằng 1 và gọi foo(6); foo(6) có k bằng 0 và gọi foo(3); foo(3) có k bằng 1 và gọi foo(1); foo(1) có m bằng 0 nên dừng rồi in 1. Quay về in tiếp 1 của foo(3), 0 của foo(6), 1 của foo(13), đúng là biểu diễn nhị phân của 13. Dãy "1 0 1 1" chính là thứ tự các dư lúc được sinh ra, tức kết quả nếu in trước khi gọi đệ quy, và nó đọc ra số 11. Dãy "1 0 0 1" đọc ra số 9, ứng với chuỗi chia đôi 9, 4, 2, 1 chứ không phải của 13. Dãy "1 0 1 0" đọc ra số 10, ứng với chuỗi 10, 5, 2, 1, cũng không khớp với 13, 6, 3, 1.

Cùng phần 3

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