Не могли бы объяснить отличие выполнение кода на рекурсивном спуске и возврате (с примером)? Как вообще определить, что программа выполняется на рек. спуске или возврате? Материала с примерами в интернете почти нет, только еще больше запутался. Можно увидеть один и тот же алгоритм, но написанный на рек. спуске и возврате? Спасибо за помощь, очень надо разобраться.
Примером рекурсивного возврата может служить функция вычисляющая факторал:
#include <iostream>
using namespace std;
int fact(int x)
{
int mult;
if (x == 1)
mult = 1;
else
mult = fact(x - 1);
// результат вычисляется посредством рекурсивного возврата
return mult * x;
}
int main(int argc, char *argv[])
{
int n = 5;
cout << "Fact !n = " << fact(n) << endl;
return 0;
}
Примером рекурсивного спуска может служить программа построения дерева каталогов.
#include <iostream>
#include <list>
using namespace std;
list<string> get_subdirs(const string &path)
{
// какая-то реализация получения списка каталогов, зависимая от ОС
}
string path_concat(const string &path, const string &name)
{
// какая-то реализация склеивания пути с именем, напр.: C:\\Users + Admin = C:\\Users\\Admin
}
string indent(int level)
{
// сформировать отступ
string result;
for (size_t i = 0 ; i < level; ++i)
result += '-';
return result;
}
void print_directory(const string &path, int level = 1)
{
list<string> subdirs = get_subdirs(path);
for (list<string>::iterator it = subdirs.begin(); it != subdirs.end(); ++it)
{
string dir = *it;
cout << indent(level) << dir << endl;
print_directory(path_concat(path, dir), level + 1);
}
}
int main(int argc, char *argv[])
{
print_directory("C:\\");
return 0;
}
Код писал на коленке, корректность не гарантирую.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Это мой код, когда я выбираю файл срабатывает callback, но функция get_filename возвращает пустую строку ""