Консультация № 72020
22.01.2007, 05:17
0.00 руб.
0 4 4
Здравствуйте эксперты!Скажите что такое рекурсия и где она применяется.Если можно то дайте
ссылки где можно об этом прочесть.Заранее спасибо.

Обсуждение

Неизвестный
22.01.2007, 06:23
общий
это ответ
Здравствуйте, Hunter20!
Если по простому, то рекурсия - это когда функция вызыает сама себе самостоятельно или посредством других функций. Обычно в качестве примера рекурсии приводят функции вычисления целой степени от числа и факториала.
Пример кода в приложении.
Думаю все должно быть понятно.

Еще один несколько примеров задач, где возможна рекурсия (код не привожу, он слишком объемный):

1) вычисление определителя матрицы
2) вычисление хроматического многочлена матрицы
Других сейчас не вспомню

Приложение:
long int Fact(long int arg){if(arg==0) return 1;else return arg*Fact(arg-1);}double MyPow(double Osn, int Pokaz){if(Pokaz==0) return 1;else return Oan*MyPow(Osn,Pokaz-1);}
Неизвестный
22.01.2007, 07:27
общий
это ответ
Здравствуйте, Hunter20!
Реккурсия - это объвление какой-либо функции с использованием ее самой. Классический пример рекурсии, это факториал числа.
F(x) = 1, x = 0
F(x) = x * F(x-1), x > 0

вот пример реализации на Си:

int Factorial(x)
{
if (x == 0)
{
return 1;
}
else
{
return x * Factorial(x - 1);
}
}

Еще применяется для отображения содержимого каталогов. Алгоритм примерно такой: на входе функции получаем каталог, выводим на экран названия всех файлов, после этого смотрим есть ли вложенные каталоги, если есть, то вызываем эту же функцию для каждого, используя в качестве параметра каталог.
Неизвестный
22.01.2007, 09:34
общий
это ответ
Здравствуйте, Hunter20!

в дополнении к тому что сказали:
1. найти множество материала можно например в google.com по запросу "рекурсия"
например неплохие ссылки:

тут рассмотрены виды рекурсии в примерах
http://comp-science.narod.ru/Progr/Rekursia.html

тут описаны недостатки рекурсии и то что любой рекурсивный алгоритм можно
заменить циклом for с использщованием польщовательской стековой структуры
http://www.kalinin.ru/programming/alg/04_09_00.shtml
http://ru.wikibooks.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F:_%D0%BF%D0%BB%D0%BE%D1%85%D0%BE_%D0%B8%D0%BB%D0%B8_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%BE

2. в профессиональном программировании рекурсия используется обычто для:
- обхода дерева каталоговов и файлов http://www.opennet.ru/docs/RUS/bogatyrev/ex_13.html

- обхода различного вида древовидных структур данных(например бинарное дерево http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 и http://rk6.bmstu.ru/electronic_book/posapr/zadanpo/bintree.htm)

- реализация регулярных выражений http://kimrycity.mcomm.ru/books/PROGR/Praktical_programing/Glava%209/Index3.htm
Неизвестный
22.01.2007, 12:41
общий
это ответ
Здравствуйте, Hunter20!
Рекурсия в программировании - это грубо говоря, когда функция
вызывает саму себя.
Применяется, например для просмотра дерева каталогов или
для вычисления факториала.
Почитать можно в любом учебнике по программированию на "C".
Или в поисковике по слову "рекурсия"


Приложение:
int factorial(int n){ int s=n; if(!n)return 1; n--; s*=factorial(n); return s;}int main(){int n=6; printf("\nfactorial(%i)=%i",n,factorial(n));}
Форма ответа