网传的一道2015阿里面试题:一台主流配置的PC上,调用f(35)所需时间,有两个版本:
    
    
    ++型
   
int f(int x)
{
    int s = 0;
    while (x++ > 0)
    {
        s += f(x);
    }
    return MAX(s, 1);
}
    结果应该是stack overflow,只会执行
    
     几毫秒
    
    。
   
    
    
    – -型
   
int f(int x)
{
    int s = 0;
    while (x-- > 0)
    {
        s += f(x);
    }
    return MAX(s, 1);
}
    函数调用过程为
    
    
     
      
       
        f 
(
35
)
=
f
(
34
)
+
f
(
33
)
+
.
.
.
.
+
f
(
2
)
+
f
(
1
)
+
f
(
0
)
=
2
∗
(
f
(
33
)
+
f
(
32
)
+
.
.
.
+
f
(
2
)
+
f
(
1
)
+
f
(
0
)
)
…
=
2
34
f
(
0
)
         \begin{aligned} f(35) &= f(34)+f(33)+….+f(2)+f(1) +f(0) \\ &= 2*(f(33)+f(32)+…+f(2)+f(1)+f(0))\\ &\dots \\ &=2^{34} f(0) \end{aligned}
       
       
        
         
         
         
          
           
            
             
              
               
                
                
                
                 
                  f
                 
                 
                  (
                 
                 
                  3
                 
                 
                  5
                 
                 
                  )
                 
                
               
               
                
                
                
                
               
               
                
                
                
                
               
               
                
                
                
                
               
              
              
               
              
             
             
              
               
               
              
             
            
           
           
            
             
              
               
                
                
                
                 
                 
                 
                 
                 
                  =
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  3
                 
                 
                  4
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  3
                 
                 
                  3
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  .
                 
                 
                  .
                 
                 
                  .
                 
                 
                  .
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  2
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  1
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  0
                 
                 
                  )
                 
                
               
               
                
                
                
                 
                 
                 
                 
                 
                  =
                 
                 
                 
                 
                  2
                 
                 
                 
                 
                  ∗
                 
                 
                 
                 
                  (
                 
                 
                  f
                 
                 
                  (
                 
                 
                  3
                 
                 
                  3
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  3
                 
                 
                  2
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  .
                 
                 
                  .
                 
                 
                  .
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  2
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  1
                 
                 
                  )
                 
                 
                 
                 
                  +
                 
                 
                 
                 
                  f
                 
                 
                  (
                 
                 
                  0
                 
                 
                  )
                 
                 
                  )
                 
                
               
               
                
                
                
                 
                 
                 
                 
                 
                  …
                 
                
               
               
                
                
                
                 
                 
                 
                 
                 
                  =
                 
                 
                 
                 
                  
                   2
                  
                  
                   
                    
                     
                      
                       
                       
                       
                        
                         
                          3
                         
                         
                          4
                         
                        
                       
                      
                     
                    
                   
                  
                 
                 
                  f
                 
                 
                  (
                 
                 
                  0
                 
                 
                  )
                 
                
               
              
              
               
              
             
             
              
               
               
              
             
            
           
          
         
        
       
      
     
    
   
    CPU主频为GHz量级,不妨取
    
     
      
       C 
P
I
f
(
0
)
=
5
        CPI_{f(0)}=5
      
      
       
        
        
        
         C
        
        
         P
        
        
         
          I
         
         
          
           
            
             
              
              
              
               
                
                 f
                
                
                 (
                
                
                 0
                
                
                 )
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
        
        
        
         =
        
        
        
       
       
        
        
        
         5
        
       
      
     
    
    ,总时间为
    
     
      
       2 
34
∗
5
÷
1
0
9
=
85.8993459
s
        2^{34}*5 \div 10^9=85.8993459\ s
      
      
       
        
        
        
         
          2
         
         
          
           
            
             
              
              
              
               
                
                 3
                
                
                 4
                
               
              
             
            
           
          
         
        
        
        
        
         ∗
        
        
        
       
       
        
        
        
         5
        
        
        
        
         ÷
        
        
        
       
       
        
        
        
         1
        
        
         
          0
         
         
          
           
            
             
              
              
              
               
                9
               
              
             
            
           
          
         
        
        
        
        
         =
        
        
        
       
       
        
        
        
         8
        
        
         5
        
        
         .
        
        
         8
        
        
         9
        
        
         9
        
        
         3
        
        
         4
        
        
         5
        
        
         9
        
        
        
        
         s
        
       
      
     
    
    ,所以结果是
    
     几分钟
    
    。实际跑出来的结果是88.903000。
   
 
