考虑下面的递归C函数。如果在main()中调用了get(6)函数,那么在返回main()之前将调用get()函数多少次?
void get (int n)
{
if (n < 1) return;
get(n-1);
get(n-3);
printf("%d", n);
}
(A) 15
(B) 25
(C) 35
(D) 45答案: (B)
解释:
get(6) [25 Calls]
/ \
[17 Calls] get(5) get(3) [7 Calls]
/ \
get(4) get(2)[5 Calls]
/ \
[7 Calls] get(3) get(1)[3 Calls]
/ \
get(2) get(0)
/ \
[3 Calls]get(1) get(-1)
/ \
get(0) get(-2)
我们可以通过运行以下程序来验证相同的结果。
# include
int count = 0;
void get (int n)
{
count++;
if (n < 1) return;
get(n-1);
get(n-3);
}
int main()
{
get(6);
printf("%d ", count);
}
输出:25
这个问题的测验