Вот.
Как-то написал один чел рекурсивную программу.
Он в ней ошибся, кстати
Собственно два вопроса:
1) Что должна была делать функция GopSwap
2) Где и какая ошиька?
/* Пример того, как не надо писать читабельные программы */
/* В этой переменной лежит второй результат ReplWordPos */
static int ResultLen;
static int iMax(int i1, int i2)
{
return i1 > i2 ? i1 : i2;
}
static BOOL cEqu(char c1, char c2)
{
return c1 == c2;
}
/* Кусок функции iter */
#define _iter_(fn, a, len, s, sh, res) \
iter(fn, a + len - len / 2, len / 2, s, sh, iter(fn, a, len / 2, s, sh, res))
/* Несомненно iter -- это самая важная функция в этом файле. */
static int iter(int (*fn)(int, char*, int, int), int a, int len, char* s, int sh, int res)
{
assert(len >= 0);
return (len - len / 2 > len / 2) ? (*fn)(a + len / 2, s, sh, _iter_(fn, a, len, s, sh, res))
: len > 0 ? _iter_(fn, a, len, s, sh, res)
: res;
}
static int smLen(int i, char* s, int sh, int res)
{
return (!cEqu(s[i], s[i + sh]) && i < res) ? i : res;
}
static int smWrd(int i, char* s, int len, int res)
{
return i == 0 ? res : iMax(res, iter(smLen, 0, len - i, s, i, len - i));
}
static int smWdth(int i, char* s, int len, int res)
{
return iter(smLen, 0, len, s, i, len) == len ? i : res;
}
static int resLen(int i, char* s, int len, int res)
{
return iter(smWrd, 0, len - i, s + i, len - i, res);
}
static int resPos(int i, char* s, int len, int res)
{
return iter(smWdth, 0, len - ResultLen - i, s + i, ResultLen, res);
}
/* Возвращает пару чисел, одно как значение, а другое в ResultLen, но вот что это за числа? */
static int ReplWordPos(char* str, int len)
{
len -= (ResultLen = iter(resLen, 0, len, str, len, 0));
return iter(resPos, 0, len, str, len, 0);
}
static int gopSwap(int i, char* s, int what, int res)
{
s[i] = (char)what;
return res;
}
/* Что делает эта функция? */
void GopSwap(char* str)
{
str += ReplWordPos(str, strlen(str));
iter(gopSwap, 0, ResultLen, str, '*', 0);
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском