帝王にifなどいらぬ!
■ このスレッドは過去ログ倉庫に格納されています
0072デフォルトの名無しさん
2006/03/17(金) 23:08:51//---------------------------------------
// 型定義&プロトタイプ宣言
typedef int data_t; // 任意のデータ型
typedef data_t (*func_t) (data_t); // 一引数関数
data_t call_n_times (int n, func_t f, data_t x);
//---------------------------------------
// 関数定義
int cond_lt (int a, int b) { return ((a-b)>>31)&1; }
data_t call0 (int n, func_t f, data_t x) { return x; }
data_t call1 (int n, func_t f, data_t x) { return f (x); }
data_t call2ormore (int n, func_t f, data_t x) {
return call_n_times (n/2, f, call_n_times (n-n/2, f, x));
}
data_t call_n_times (int n, func_t f, data_t x) {
data_t (*table[3]) (int, func_t, data_t) = {
call0, call1, call2ormore
};
return (*table[cond_lt(0,n) + cond_lt(1,n)]) (n, f, x);
}
//-----------------------------------
// 使い方サンプル:1〜100000を表示する
#include <stdio.h>
data_t print_and_increment (data_t x) {
printf ("%d\n", x); return x+1;
}
int main (int argc, char** argv) {
call_n_times (100000, print_and_increment, 1);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています