Consider the following function:

4 phương ánCó giải thích
Đề bài
void fun(int n)
  {if (n <= 0)
   System.out.println("That's all!");
   else
    {for(int i = 1; i <= n; i++)
     System.out.print("*");
     System.out.println( );
     fun(n - 2);
    }
  }

What is the output when the statement fun(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: "***** *** * That's all!", tức năm dấu sao ở dòng đầu, rồi ba, rồi một, cuối cùng mới tới dòng chữ. Đọc theo đúng thụt lề: khi n còn dương, hàm chạy vòng for in ra n dấu sao rồi xuống dòng, sau đó mới gọi fun(n-2); nghĩa là in trước, đệ quy sau. Vậy fun(5) in năm dấu sao, fun(3) in ba, fun(1) in một, rồi fun(-1) rơi vào nhánh n nhỏ hơn hoặc bằng 0 và in dòng chữ đúng một lần ở cuối. Dãy "That's all! ***** *** *" đặt dòng chữ lên đầu, thứ tự đó chỉ xảy ra khi lời gọi đệ quy đứng trước vòng for. Dãy "**** ** * That's all!" ứng với fun(4): trừ dần 2 từ 4 thì sau hai dòng đã về 0 nên không thể có dòng một dấu sao. Dãy "* *** ***** That's all!" đi theo chiều tăng, chiều này chỉ xuất hiện nếu vòng for được đặt sau lời gọi fun(n-2) để in lúc các lời gọi lần lượt quay về.

Cùng phần 3

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