Consider the following function:

4 phương ánCó giải thích
Đề bài
int fun(int n)
  {if (n < 0)
      return(fun(-n));
       else if(n<4)
        return(2);
          else
          return(n*fun(n/2));
  }

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<4". Hàm có ba nhánh: n âm thì gọi lại chính nó với -n, n nhỏ hơn 4 thì trả về 2 ngay, còn lại trả về n nhân fun(n/2). Chỉ nhánh giữa kết thúc mà không sinh thêm lời gọi nào nên đó là trường hợp dừng; nhưng nhánh ấy chỉ tới được khi điều kiện n âm đã sai, nghĩa là n không âm. Ghép hai điều đó thì những giá trị được trường hợp dừng xử lý trực tiếp đúng là n từ 0 tới 3. Điều kiện "n < 0" là một nhánh đệ quy: với n âm hàm còn phải gọi fun(-n) rồi mới có cơ hội dừng. Điều kiện "n < 4" bao cả số âm, mà số âm phải đi qua lời gọi đổi dấu trước đã nên không được xử lý trực tiếp. Điều kiện "n > = 4" là nhánh nhân rồi chia đôi, càng không phải chỗ dừng vì nó luôn sinh thêm một lời gọi nữa.

Cùng phần 3

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