📜  门| GATE-CS-2015(Set 3)|第49章

📅  最后修改于: 2021-06-30 01:52:18             🧑  作者: Mango

考虑下面的递归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
这个问题的测验