один месяц назад я давал интервью некоторым членам Google PTO.Один из вопросов был: Рекурсивно инвертировать строку в js и объяснить время выполнения большими буквами O
Это было мое решение:
function invert(s){
return (s.length > 1) ? s.charAt(s.length-1)+invert(s.substring(0,s.length-1)) : s;
}
Довольно просто,Я думаю.
И по поводу биг-о записи я быстро ответил O (n), так как время работы линейно зависит от входа.- Молчание - а потом, он спросил меня, каковы различия с точки зрения времени выполнения, если вы реализуете его итерацией?
Я ответил, что иногда компилятор "переводит" рекурсию в итерацию (некоторые курсы языка программированиявоспоминания), поэтому нет никаких различий в отношении итерации и рекурсии в этом случае.Кстати, поскольку у меня не было отзывов об этом конкретном вопросе, и интервьюер не ответил «хорошо» или «нет», я хотел бы знать, можете ли вы согласиться со мной или вы можете объяснить мне, могут ли быть различия в2 вида реализации.
Большое спасибо и С уважением!