две вещи: во-первых, терминология: функция декларации вы написали возвращает void
и не string
, но на самом деле напечатать строку. Во-вторых, код, который вы опубликовали, печатает «Hello», когда я запускаю его. Я собираюсь предположить, что ваш вопрос касается того, почему «olleH» печатается, если изменить порядок этих двух линий в function()
:
cout << str[pos]; //prints "Hello"
function(str, pos + 1, size);
по сравнению с:
function(str, pos + 1, size);//prints "olleH"
cout << str[pos];
Это, как вы - заявил он, - это рекурсия. Чтобы понять это, вам нужно иметь в виду порядок, в котором вызываются функции, и обратный порядок, в котором они возвращаются, передавая управление вызываемой им функции. Первый вызов function()
с pos
в начале строки возвращает последний, а рекурсивные вызовы возвращаются до того, как это произойдет, с самым внутренним вызовом функции с pos
в конце строки, которая будет полностью запущена. (Это связано с тем, что рекурсивный вызов выполняется только if (pos < size)
, и это ограничение очень важно для предотвращения бесконечного цикла). Таким образом, при первом вызове function()
св начале, если он записывает первый символ перед вызовом function()
, чтобы записать оставшуюся часть строки, строка будет в порядке. Если вы напишете первый символ после написания остальной части строки, то он будет в обратном порядке, как в двух разных случаях.
Это ничего не возвращает, потому что тип возврата является 'void'. – immibis
Проследите через код. Я в тебя верю. – karina
В коде нет инструкции «cout». Даже если они были, один или два, они тоже ничего не «возвращают». –