Я думаю, что вы сделали. У вас есть две прекрасные рекурсивные функции и вызов из них в одну строку.
Я могу думать только о хакерском способе сделать это даже в одной функции:
void
mystrcat(char* to, const char* from, bool copy_now)
{
if (!copy_now && *to)
{
mystrcat(to+1, from, false);
return;
}
*to = *from;
if (*to)
mystrcat(to+1, from+1, true);
}
Это почти не плохо, если вы используете C ++ и вы делаете copy_now
необязательным параметром со значением по умолчанию false
. Тогда вызывающий может притвориться, что у него нет этого дополнительного бита состояния.
Но если проблема достаточно сложна, чтобы заставить вас обратиться за помощью в StackOverflow, это слишком сложно, чтобы быть разумным вопросом для интервью. Вы могли бы попросить его просто попытаться заставить человека мыслить нестандартно, но не делайте неудачу, чтобы автоматически получить хороший ответ.
Я предлагаю добавить еще одну прекрасную рекурсивную проблему: найдите глубину двоичного дерева.
Учитывая следующую структуру:
typedef struct s_node
{
struct s_node *pLeft;
struct s_node *pRight;
} NODE;
написать функцию
int tree_depth(NODE *pNode)
, который возвращает максимальную глубину дерева. Мне на самом деле задавали этот вопрос в одном интервью, и я думаю, что это просто правильный уровень сложности для интервью. Люди, которых вы не хотите нанимать, будут иметь проблемы с этим, и людям, которых вы, возможно, захотите нанять, вероятно, это понравится.
РЕДАКТИРОВАТЬ: я проверил функцию и обнаружил, что она имеет ошибку. В этой версии исправлена ошибка.