考えてみリゃループの中で if 文使ってなくても、跳んだ先の関数内でif分岐してりゃ分岐の処理数は同じなんだよな。それだったら最初からループの中でやったほうが速い。
#include <stdio.h> #include <stdlib.h> void select_char(char * buf, int pos) { int i; if(pos == 9) { buf[pos] = '\0'; printf("%s\n", buf); return; } for(i = 'A'; i < 'Z'; i++) { if(pos >= 2 && buf[pos - 1] == buf[pos - 2] && buf[pos - 1] == i) continue; buf[pos] = i; select_char(buf, pos + 1); } } int main(int argc, char **argv) { char buf[10]; select_char(buf, 0); return EXIT_SUCCESS; }