Consider the following function:

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

What will happen if the statement fun(21); 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: "The run-time stack overflows, halting the program". Hàm fun không có nhánh dừng nào: với n = 21 nó in 21%5 = 1 rồi gọi fun(7) in 2, gọi fun(2) in 2, rồi gọi fun(0); từ đó 0/3 vẫn bằng 0 nên fun(0) tự gọi fun(0) mãi mãi, mỗi lời gọi chiếm thêm một khung trên ngăn xếp cho tới khi máy ảo hết vùng ngăn xếp, ném StackOverflowError và chương trình dừng. Phương án "The operating system detects the infinite recursion because of the 'repeated state'" sai vì không hệ điều hành nào theo dõi việc tham số lặp lại trạng thái; máy ảo chỉ biết ngăn xếp đã chạm giới hạn chứ không nhận ra n đứng mãi ở 0. "The program keeps running until you press Ctrl-C" sai vì chương trình tự chết do tràn ngăn xếp sau hữu hạn lời gọi, không cần người dùng ngắt. "The results are nondeterministic" sai vì cả dãy in ra lẫn thời điểm vỡ đều xác định: cùng một giới hạn ngăn xếp luôn cho cùng một kết quả.

Cùng phần 3

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