Я думаю, у вас две проблемы. Во-первых, вы проверяете нечетный показатель один раз в конце, а не каждый раз через цикл; два, ваш чек для нечетного экспонента ошибочен.
Вот рекурсивная версия, которая работает для нескольких примеров, которые я нашел в Интернете.
unsigned long int decrypt2(int a,int b,int n)
{
unsigned long int res;
if (b == 0) {
res = 1;
} else if (b % 2 == 1) {
res = a * decrypt2( a, b-1, n );
} else {
res = decrypt2( a, b/2, n );
res = (res*res)%n;
}