PDA

View Full Version : за програмисти



onqtam
02-11-2010, 19:08
каква е разликата между това

void func(void)
{
func();
func();
}

и това

void func(void)
{
func();
}

:D :D :D

anonymous546178
02-12-2010, 06:55
никва май :)

Nam3less3
02-12-2010, 13:34
каква е разликата между това

void func(void)
{
func();
func();
}

и това

void func(void)
{
func();
}

:D :D :D

На теория тези функции са рекурсивни(в програмирането, рекурсивно значи функцията сама да извика себе си, примерно така може да се направи функция за изчисляване на факториел). На практика, нищо няма да се получи, тъй като функциите са празни, а рекурсията не трябва ей тъй да я слагаш из функцията, а в някакво условие или цикъл примерно трябва да е. И 2та примера са доста грешни, особено първият пък съсвем. Разликата е, че на теория се опитваш 2 пъти подред да извикаш функцията, което на практика пак няма да стане.

Chacho
02-12-2010, 14:12
Nam3less е много прав. Пък и почти винаги рекурсия се използва с промяна на аргументите на процедурата/функцията. Тук функцията ти е безаргументна. Не съм запознат с езика, но или това е процедура или е нужно функцията да присвои стойност. Просто написана функция нищо не прави. Те връщат/присвояват стойности.

Ето една примерна процедура на псевдокод с включена рекурсия.


Процедура Показ_Папки(път до папката като низ)

начало на процедурата

Ако папката е една -> Изведи папката.

Показ_Папки(едната папка)

Иначе:

Докато има папки:

Изведи името на папката

Показ_Папки(текущата папка)

Премести на следваща папка.

Край на цикъла

Край на иначе-то

Край на процедурата.

Nam3less3
02-12-2010, 14:28
И ето на C++ функция за намиране на факториел с рекурсия(функцията приема аргумент числото, на което трябва да намерим факториела). Иначе по принцип рекурсията е бавна.


unsigned fact(unsigned x)
{
if (x==0) return 1;
else
{
unsigned faktoriel=x*fact(x-1);
return faktoriel;
}
}