📜  门| GATE-CS-2015(套装3)|第 49 题

📅  最后修改于: 2021-09-25 07:23:50             🧑  作者: Mango

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