写一个函数: 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:?