Consider the following function:
4 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);". Hàm dừng khi n không âm và nhỏ hơn 5; n âm thì tốn thêm một lời gọi để đổi dấu, n từ 5 trở lên thì gọi tiếp với n/2. Với "fun(-1012);" chuỗi gọi là fun(-1012), fun(1012), fun(506), fun(253), fun(126), fun(63), fun(31), fun(15), fun(7), fun(3), tức chín lời gọi đệ quy gồm tám lần chia đôi cộng một lần đổi dấu. Lời gọi "fun(1012);" đi đúng tám lần chia đôi ấy nhưng không cần bước đổi dấu nên ít hơn một lời gọi. Lời gọi "fun(100);" chia đôi theo chuỗi 100, 50, 25, 12, 6, 3 nên chỉ có năm lời gọi đệ quy. Lời gọi "fun(0);" có n bằng 0, vừa không âm vừa nhỏ hơn 5 nên rơi thẳng vào chỗ dừng và không sinh lời gọi nào.
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