淘宝笔试题,受限的降序打印

写一个函数: int print_num(int k){}; 要求函数功能为打印k的降序,直到0结束,即如果k=5,即打印: 5 4 3 2 1 0
要求: 不能用 if , if else, switch, ?: , while, for , do while, goto 语句 

解法1:利用构造函数和数组

 1 class Printer 
 2 { 
 3 public: 
 4  static int counter; 
 5  Printer() 
 6  { 
 7   cout<<counter<<endl; 
 8   counter--; 
 9  } 
10 }; 
11 int Printer::counter = 0;
12 int print_num(int k) 13 { 14 Printer::counter = k; 15 Printer *pter = new Printer[k+1]; 16 delete[] pter; 17 return 0; 18 }

 

解法2:利用编译器

1 int print_num(int k) 
2 { 
3  printf("%d",k); 
4  k&&print_num(k-1); 
5  return k; 
6 }

 

1 003C13C4  call        @ILT+310(__RTC_CheckEsp) (3C113Bh)  // 秘诀在这里
2     k&&print_num(k-1); 
3 003C13C9  cmp         dword ptr [k],0  
4 003C13CD  je          print_num+4Eh (3C13DEh)  
5 003C13CF  mov         eax,dword ptr [k]  
6 003C13D2  sub         eax,1  
7 003C13D5  push        eax  
8 003C13D6  call        print_num (3C102Dh)  

在用if(a&&b)的时候,编译器会主动优化,a为false不会再继续判断b,这儿是一个道理

解法3:?

posted @ 2012-08-26 16:16  持幕  阅读(178)  评论(0编辑  收藏  举报