Consider the following function:

4 phương ánCó giải thích
Đề bài
void quiz(int n)
  {if (n > 1)
      {quiz(n);
        quiz(n);
      }
      System.out.print("*  ");
  }

What will happen if the statement quiz(5); 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". Lời gọi bên trong truyền đúng n chứ không phải n-1, nên điều kiện n lớn hơn 1 mãi đúng và không trường hợp cơ sở nào được tới; mỗi lượt gọi lại đặt thêm một khung lên ngăn xếp thời gian chạy, mà ngăn xếp có dung lượng giới hạn, nên máy ảo ném lỗi tràn ngăn xếp rồi dừng chương trình, thường chỉ sau một phần nhỏ của giây. Phương án "The program keeps running until you press Ctrl-C" hình dung một vòng lặp vô hạn không tốn bộ nhớ, nhưng đệ quy thì tiêu ngăn xếp mỗi lượt nên không thể chạy mãi. Phương án "The operating system detects the infinite recursion" gán cho hệ điều hành khả năng phân tích chuỗi lời gọi để nhận ra trạng thái lặp lại, điều không hệ nào làm; giới hạn duy nhất là dung lượng ngăn xếp. Phương án "The results are nondeterministic" sai vì hành vi lặp lại y nguyên mỗi lần chạy, kết cục luôn là tràn ngăn xếp.

Cùng phần 3

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