ループを使わずに配列の順序を逆にする
プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集 - ZDNet Japan
ループを使わずに配列の順序を逆にする。
という件があったのでチャレンジしてみた。
#include <iostream> #define ARRAY_NUM(a) (sizeof(a)/sizeof(a[0])) using std::cout; using std::endl; template<class T> void reverse(T* a,int num,int start=0) { if ( (num-1)/2 <= start ) return; T tmp = a[start]; a[start] = a[num-1-start]; a[num-1-start] = tmp; reverse(a,num,++start); } int main () { int a[] = {1,2,3,4,5,6,7,8,9,10}; int num = ARRAY_NUM(a); reverse(a,num); for(int i=0;i<num;++i){ cout << a[i] << endl; } return 0; }
$ main 10 9 8 7 5 6 4 3 2 1
再帰を利用。思ったより短いコードで書けたので満足。