Consider the following function:

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

What is the output when the statement:

Đề bài
System.out.println(fun(9));

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: "17". Hàm cộng n vào kết quả của fun(n/2) và dừng ở n bằng 0 với giá trị trả về 1, phép chia là chia nguyên. Chuỗi lời gọi là fun(9), fun(4), fun(2), fun(1), fun(0), nên tổng bằng 9 cộng 4 cộng 2 cộng 1 cộng 1, trong đó số 1 cuối là giá trị của trường hợp dừng. Số "16" bằng 9 cộng 4 cộng 2 cộng 1, tức quên rằng fun(0) trả về 1 chứ không phải 0. Số "18" lớn hơn kết quả đúng một đơn vị, nó đòi thêm một tầng nữa trong chuỗi chia đôi, nhưng sau fun(1) thì 1 chia 2 bằng 0 và đệ quy dừng ngay. Số "15" nhỏ hơn hai đơn vị, ứng với việc bỏ cả tầng fun(1) lẫn giá trị dừng, trong khi 1 lớn hơn 0 nên tầng ấy vẫn chạy và vẫn góp 1.

Cùng phần 3

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