Consider the following function:

4 phương ánCó giải thích
Đề bài
void fun(int n)
  {if (n < 0)
    {System.out.println(“-“);
     fun(-n);
    }
    else if(n<10)
      System.out.println(n);
        else
        {fun(n/10);
         System.out.println(n%10);
        }
  }

What values of n are directly handled by the stopping (base) case?

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: "n >= 0 && n<10". Trường hợp dừng là nhánh không còn gọi lại chính nó, ở đây chỉ có nhánh else if(n<10) in ngay n rồi kết thúc. Nhưng nhánh đó chỉ được xét sau khi điều kiện n < 0 đã sai, nghĩa là n đang không âm, nên tập giá trị được xử lý trực tiếp là các n thoả cả hai điều kiện: không nhỏ hơn 0 và nhỏ hơn 10, tức các số một chữ số. "n < 0" không phải điểm dừng, vì thân nhánh ấy in dấu trừ rồi gọi tiếp fun(-n), vẫn là bước đệ quy. "n < 10" bỏ qua việc các số âm đã bị nhánh đầu chặn lại, nên nó gộp cả số âm vào trường hợp dừng dù số âm phải đi qua một lời gọi nữa. "n > = 10" là nhánh else cuối, nơi hàm gọi fun(n/10) rồi in n%10, tức nhánh sinh đệ quy chứ không phải nhánh kết thúc.

Cùng phần 3

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