Consider the following function:

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

What is the value of fun(5)?

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: "10". Hàm có ba nhánh: n âm thì đổi dấu rồi gọi lại, n nhỏ hơn 5 thì trả 2, còn lại trả n nhân fun(n-2). Với n = 5: 5 không âm và cũng không nhỏ hơn 5, nên vào nhánh cuối và cần fun(3); 3 nhỏ hơn 5 nên fun(3) = 2 và dừng tại đó. Vậy fun(5) = 5 × 2 = 10. "2" chính là giá trị của fun(3), tức dừng ở lời gọi con mà quên nhân với 5. "5" đòi fun(3) phải bằng 1, nhưng nhánh dừng của hàm trả 2 chứ không trả 1. "4" là 2×2, như thể cả fun(5) và fun(3) đều rơi vào nhánh dừng, trong khi 5 không nhỏ hơn 5. "12" không phải bội của 5, mà phép cuối bắt buộc là 5 nhân với kết quả của fun(3), nên mọi giá trị trả về đều phải chia hết cho 5.

Cùng phần 3

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