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));
}What is the value of fun(-3)?
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: "2". Lời gọi fun(-3) rơi vào nhánh n < 0 nên hàm tự gọi lại với -(-3) = 3; ở lời gọi thứ hai n = 3 thoả điều kiện n < 5 nên hàm trả về ngay hằng 2 và dãy đệ quy dừng, không bao giờ chạm tới nhánh lấy n nhân với fun(n/2). Giá trị 2 ra tới ngoài nguyên vẹn vì nhánh n < 0 chỉ viết return(fun(-n)) chứ không nhân hay cộng thêm gì. Phương án "12" ứng với việc tưởng nhánh cuối được dùng, kiểu lấy 3 nhân fun(1) rồi còn nhân tiếp, nhưng với n = 3 thì điều kiện n < 5 đã chặn trước khi tới đó. Phương án "4" ứng với việc cộng dồn hai lần giá trị dừng 2, trong khi mỗi lời gọi chỉ trả về một lần. Phương án "5" là chính ngưỡng dừng n < 5 bị chép lại thành kết quả, còn hàm thì trả về hằng 2 chứ không trả về ngưỡng. Phương án "10" là 5 nhân 2, tức lấy ngưỡng nhân với giá trị cơ sở, một phép tính không có trong mã. Bẫy của câu này nằm ở dấu âm: hàm đổi dấu trước rồi mới so sánh, nên fun(-3) và fun(3) cho cùng một kết quả.
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)
{if (n < 0)
{System.out.println(“-“);
fun(-n);
}
else if(n<10)
System.out.println(n);
else
{fun(n/10);
System.out.println(n%10);
}
}
What values of n are directly handled by the stopping (base) case?Có lời giảiCâu hỏiConsider the following function:
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ó 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