сам гуманитарий, бесконечная рекурсия - это уже фрактал.
"Реку́рсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя"
1) рекурсия - это вызов функции самой собой; бывает прямая - функция вызывает себя же, бывает косвенная - функция А вызывает функцию Б, а та вызывает А (не обязательно два уровня, может быть много);
2) рекурсия НИЧЕМ не отличается от цикла идеологически; более того, в функциональных языках циклов НЕТ и они реализуются именно через рекурсию; более того, во многих языках некоторые виды рекурсии разворачиваются компилятором в, сюрприз, цикл (оптимизация хвостовой рекурсии)!
3) количество повторов вызовов в рекурсии никак не относится к тому, рекурсия это или нет; более того, на практике бесконечных рекусий обычно не делают - при вызове функции тратится стек, а вышеупомянутая оптимизация хвостовой рекурсии возможна не всегда и не во всех компиляторах есть, так что при бесконечной рекурсии просто кончится стек и программа упадёт; более того, даже ОДИН вызов функции _самой собой_ - тоже вполне себе рекурсия, пример этого:
void foo(int x) {
doSmth(x);
if (abs(x % 2) != 0) {
foo(abs(x - 1));
}
}
Тут именно рекурсия, просто с глубиной 1.
Но на всякий случай вот тебе пример рекурсии спецом с тремя итерациями:
Возможно во всём виноват стул)
"Реку́рсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя"
1) рекурсия - это вызов функции самой собой; бывает прямая - функция вызывает себя же, бывает косвенная - функция А вызывает функцию Б, а та вызывает А (не обязательно два уровня, может быть много);
2) рекурсия НИЧЕМ не отличается от цикла идеологически; более того, в функциональных языках циклов НЕТ и они реализуются именно через рекурсию; более того, во многих языках некоторые виды рекурсии разворачиваются компилятором в, сюрприз, цикл (оптимизация хвостовой рекурсии)!
3) количество повторов вызовов в рекурсии никак не относится к тому, рекурсия это или нет; более того, на практике бесконечных рекусий обычно не делают - при вызове функции тратится стек, а вышеупомянутая оптимизация хвостовой рекурсии возможна не всегда и не во всех компиляторах есть, так что при бесконечной рекурсии просто кончится стек и программа упадёт; более того, даже ОДИН вызов функции _самой собой_ - тоже вполне себе рекурсия, пример этого:
void foo(int x) {
doSmth(x);
if (abs(x % 2) != 0) {
foo(abs(x - 1));
}
}
Тут именно рекурсия, просто с глубиной 1.
Но на всякий случай вот тебе пример рекурсии спецом с тремя итерациями:
void foo(int x, int level = 3) {
doSmth(x);
if (level != 0) {
foo(x, level--);
}
}
Накипело.