大门|大门-CS-2015(第三组)|问题49

考虑下面的递归C函数。如果在main()中调用get(6)函数,那么在返回main()之前,get()函数将被调用多少次?

null

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 <stdio.h>
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 这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享