Consider the following function:

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

For the call fun(3, 3), how many calls to fun will be made, including the original call?

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: "3". Mỗi lời gọi chỉ sinh đúng một lời gọi con với tham số n/2 chia nguyên, và dừng khi n bằng 0, nên số lời gọi bằng số lần chia 3 cho 2 để về 0, cộng thêm lời gọi ban đầu. Chuỗi cụ thể: fun(3, 3) gọi fun(3, 1) vì 3/2 = 1; fun(3, 1) gọi fun(3, 0) vì 1/2 = 0; fun(3, 0) gặp n == 0 nên trả 1 ngay và không gọi thêm. Đếm cả lời gọi đầu tiên được 3. "2" dừng đếm ở fun(3, 1), quên rằng 1 vẫn chưa phải điều kiện dừng nên còn một lời gọi nữa. "8" là 2 lũy thừa 3, tức số lời gọi của một hàm mỗi lần sinh hai lời gọi con qua ba mức; hàm này chỉ sinh một lời gọi con mỗi lần. "9" là 3 nhân 3, một kết quả trung gian của phép lũy thừa chứ không phải số lời gọi, và giá trị hàm trả về ở đây còn là 27.

Cùng phần 3

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