Consider the following function:
4 phương ánCó giải thích
void fun(int n)
{int m = n/2;
int k = n%2;
System.out.print(k + " ");
if (m > 0)
{fun(m);
}
}What is the output when the statement fun(12); is run?
Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "0 0 1 1". Hàm tính m = n/2 theo phép chia nguyên và k = n%2, in k TRƯỚC rồi mới gọi đệ quy khi m > 0, nên các chữ số hiện ra theo chiều từ bit thấp lên bit cao. Chạy fun(12): m = 6, k = 0 nên in 0; fun(6): m = 3, k = 0 nên in 0; fun(3): m = 1, k = 1 nên in 1; fun(1): m = 0, k = 1 nên in 1 rồi m = 0 nên dừng. Dãy in ra là 0 0 1 1. Phương án "1 1 0 0" chính là biểu diễn nhị phân 1100 của 12 đọc theo chiều quen thuộc từ bit cao, tức kết quả nếu lệnh in được đặt SAU lời gọi đệ quy; ở đây in đứng trước nên thứ tự đảo lại. Phương án "1 0 1 0" là dãy số dư của 10 chứ không của 12. Phương án "1 0 1 1" đòi số dư đầu tiên của 12 phải là 1, nhưng 12 chẵn nên 12%2 = 0. Vị trí của lệnh in so với lời gọi đệ quy là điều quyết định ở đây, không phải phép chia.
Cùng phần 3
Consider the following function:
void fun(int n)
{if(n > 0)
{System.out.print(" " + n );
fun(n-2);
}
}
What is the output when the statement fun(9); is run?Có lời giảiCâu hỏiConsider the following function:
void fun(int n)
{int m = n/2;
int k = n%2;
if (m > 0)
{fun(m);
}
System.out.print(k + " ");
}
What is the output when the statement fun(11); is run?Có lời giảiCâu hỏiConsider the following function:
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(-3)?Có lời giảiCâu hỏiCả 41 câu của chủ đề41 câu
Xuất hiện trong 1 bộ đề
Đi tiếp từ đây