Consider the following function:
5 phương ánCó giải thích
int fun(int n)
{if (n < 0)
return(fun(-n));
else if(n<5)
return(2);
else
return(n*fun(n/2));
}Which call will result in the most recursive calls?
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: "fun(-1012);". Với đối số âm, hàm gọi thêm một lượt fun(-n) rồi mới bước vào chuỗi chia đôi, nên nó tốn đúng một lời gọi nhiều hơn số dương tương ứng. Chuỗi của 1012 là 1012, 506, 253, 126, 63, 31, 15, 7 rồi 3 và dừng vì 3 nhỏ hơn 5, tức 8 lời gọi đệ quy; fun(-1012) thêm bước đổi dấu nên có 9. Phương án "fun(1012);" chính là chuỗi 8 lời gọi vừa đếm, ít hơn đúng một bước. Phương án "fun(1014);" cũng chỉ được 8 vì 1014 chia đôi thành 507 rồi 253, nhập vào đúng chuỗi của 1012 từ số 253 trở đi. Phương án "fun(100);" chỉ có 5 lời gọi theo chuỗi 100, 50, 25, 12, 6, 3. Phương án "fun(0);" không gọi đệ quy lần nào vì 0 nhỏ hơn 5 nên hàm trả về 2 ngay.
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