[Technical issue] Тail recursion C# ??
Първо историята накратко. Решавам задачките от лаба с алгоритмите по Advanced C#. Четвърта задача ми е най-интересна и почвам от нея. Понеже искам да се помъча повече, реших да си я мисля рекурсивно, като просто обяснението, което е дадено в условието на задачата, го имплементирах в един метод. Нямам проблеми, задачката си върви - ето код на който му е интересно.
Сега вече следва и същинското питане. Имам ReSharper, който ми обяснява, че това цялото може да се напише с while цикъл. Добре, няма проблеми, обаче аз не искам, кефа си се на задачката така. Самото обяснение е "Tail recursion can be implemented with a while loop". Става ми интересно какво точно е Tail рекурсия, обаче според този пост, в C# такъв тип рекурсия няма.
Някой може ли да разясни малко повече, на ReSharper ли да вярвам, или на StackOverflow.
Ps. в уикипедия също не се споменава за Tail рекурсия в C#, в F# има. Не че някога съм виждал F#.
Ps2. всякакви критики по кода се приемат без обиди, даже ще се радвам да ми посочите къде да подобрявам, рекурсия тренирам от скоро : )
Аз бърках Tail Call с Таil Recursion. Значи ришарпъра не ме лъже, просто аз не го разбирам правилно : D Голяма изненада.
Благодаря за отговора. Ако на някого му е станало интересно и иска нещо допълнително - тук има много хубаво обяснение, като за хора с бекграунд C#. Java и подобни езици.
А до теб и до Фил: не се притеснявайте, няма да почна да пиша всичко рекурсивно (една причина е защото най-вероятно не мога : ) ) . Просто обичам да разцъквам някакви неща и да видя къде ще се строшат.
Рекурсията си има приложения, просто трябва да се ползва по-пестеливо. Докато си писал задачата предполагам на някакъв етап ти се е наложило да дебъгваш и подозирам, че поне в първия момент ти е било малко трудно да се ориентираш какво се случва в дебъгера. Винаги е полезно да разцъкваш :)
За да я има рекурсията, значи има причина :). Факт е, че някои задачи се решават много по-лесно с нея. Особено интуитивно се прилага за структури от данни, в които отделните "парчета данни" са свързани по малко по-сложен начин - графи и дървета.
А това "Просто обичам да разцъквам някакви неща и да видя къде ще се строшат." е не само полезно, а е най-добрият и ефективен начин да се научиш :). При мен винаги работи :).