考虑以下递归 C函数。如果在 main() 中调用 get(6)函数,那么在返回 main() 之前将调用 get()函数多少次?
void get (int n)
{
if (n < 1) return;
get(n-1);
get(n-3);
printf("%d", n);
}
(一) 15
(乙) 25
(三) 35
(四) 45答案:(乙)
解释:
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
这个问题的测验