Так базовый вариант возврата для этого и делается, чтобы такого не происходило
Зачем, когда можно обернуть в try...catch возвратить из catch?
Вопрос, ловится ли переполнение стека в try...catch, предлагаю не поднимать.
Вопрос, ловится ли переполнение стека в try...catch, предлагаю не поднимать.
Упавший по этой причине сервис предлагаю тоже не подымать.
и что в catch будет возвращать функция?
что успела насчитать до catch то и вернёт
хуже уже не будет
хуже уже не будет
Я всё же предлагаю сделать рекурсивный вызов опять
Не, фигня получается
опять считать уже посчитанное - не оптимально
предлагаю или мемоизировать результаты предыдущей рекурсии
или распараллеливать текущую
как - хрен знает, не ко мне вопрос, я не джун, я тимлид, я думаю стратегически
опять считать уже посчитанное - не оптимально
предлагаю или мемоизировать результаты предыдущей рекурсии
или распараллеливать текущую
как - хрен знает, не ко мне вопрос, я не джун, я тимлид, я думаю стратегически
Словится. В процессе обратной раскрутки колстека при ловле исключений часть стека очищается, что позволяет программе продолжить работать.
Тогда остаётся вопрос будет ли в этом продолжении работы смысл уже. Несмотря на весь юмор, если мы довели до переполнения стека, упали в кетч, положили на это хер, и пошли дальше : явный признак что у нас что-то сделано не так в коде, причём в генетическом. И наверное кроме переполнения буфера, есть ещё и переполнение количества хромосом.
Бесконечная рекурсия возможна либо при бесконечных данных (что невозможно), либо на закольцованных. При закольцованных данных у автора кода могут быть обоснованные предположения о том, что при достижении переполнения стека необходимая работа уже сделана. Например если это вычисление какого-нибудь числа Пи, то в момент достижения предела стека мы можем считать что вычислили Пи с максимально возможной точностью. Если же данные не бесконечные и не закольцованные, то критерий выхода так или иначе возникает (даже если это NullReferrenceException).
В чём проблема с получением бесконечных данных? Например можно читать /dev/urandom потоком, или из осмысленного - получение данных с внешних датчиков, например температуры или потока с веб-камеры, оставляя за скобками вопрос работы с такими данными через рекурсию.
А с вычислением того-же числа Пи рекурсивной функцией это странный пример. Начиная с того что проще взять значение нужной точности со спец.сайта, а не расходовать впустую мощность, вычисляя самому. И заканчивая тем что глубина рекурсии в этом случае может быть разной, и меняться от запуска к запуску. Или вообще, например как в Java, зависеть от версии или даже ключа запуска. Уж если возникло странное желание повычислять Пи то уж разложи рекурсию в цикл и вычисляй с НУЖНОЙ точностью.
А закольцованные данные это как?
Чёто мы с юмор и сарказма в серьёзное дерьмо переехали
А с вычислением того-же числа Пи рекурсивной функцией это странный пример. Начиная с того что проще взять значение нужной точности со спец.сайта, а не расходовать впустую мощность, вычисляя самому. И заканчивая тем что глубина рекурсии в этом случае может быть разной, и меняться от запуска к запуску. Или вообще, например как в Java, зависеть от версии или даже ключа запуска. Уж если возникло странное желание повычислять Пи то уж разложи рекурсию в цикл и вычисляй с НУЖНОЙ точностью.
А закольцованные данные это как?
Чёто мы с юмор и сарказма в серьёзное дерьмо переехали
смотря на чём и как писать. там, где есть tail call optimization, не остановится.
ну мы же не ищем лёгких путей, иначе просто развернули бы рекурсию сами.
тащемто мы тут в юмор пытались, а ты сюда на серьёзных щщах влетаешь
тащемто мы тут в юмор пытались, а ты сюда на серьёзных щщах влетаешь
Без перевода же. А так запостили с разницей в несколько минут, пока я гонял через баянометры и вспоминал тэги.
Рекурсивная функция - это функция, которая вызывает сама себя, пока не наткнется на базовый случай. Если базовый случай не обозначить, она так и будет вызывать сама себя, пока не превратится в ком из сожранной памяти. Мало того, что рекурсивные функции надо использовать аккуратно, так за такие ошибка надо вообще ссать на глаза.
разве это рекурсия?
всё просто.
точка, в которой значение функции равно её аргументу называется fixed point.
функция, которая принимает функцию и возращает её fixed point называется fixed point combinator. У любой функции есть fixed point (теорема, в лямбда исчислении доказана)
по определению:
f x0 = x0, Y f = x0
подставляем второе в первое:
f (Y f) = Y f
подставляем правую часть в левую:
f (f (Y f)) = Y f
подставляем правую часть в левую:
f (f (f (Y f))) = Y f
подставляем правую часть в левую:
f (f (f (f (Y f)))) = Y f
подставляем правую часть в левую:
f (f (f (f (f (Y f))))) = Y f
подставляем правую часть в левую:
f (f (f (f (f (f (Y f)))))) = Y f
короче я думаю принцип понятен
точка, в которой значение функции равно её аргументу называется fixed point.
функция, которая принимает функцию и возращает её fixed point называется fixed point combinator. У любой функции есть fixed point (теорема, в лямбда исчислении доказана)
по определению:
f x0 = x0, Y f = x0
подставляем второе в первое:
f (Y f) = Y f
подставляем правую часть в левую:
f (f (Y f)) = Y f
подставляем правую часть в левую:
f (f (f (Y f))) = Y f
подставляем правую часть в левую:
f (f (f (f (Y f)))) = Y f
подставляем правую часть в левую:
f (f (f (f (f (Y f))))) = Y f
подставляем правую часть в левую:
f (f (f (f (f (f (Y f)))))) = Y f
короче я думаю принцип понятен
Для далёкого совсем нихуя не понятно описал.
чувак, я и сам это не понимаю.
> У любой функции есть fixed point (теорема, в лямбда исчислении доказана)
Што? В данной формулировке утверждение неверно. Например, когда область определения и область значений функции не пересекаются. И даже если пересекаются: f(x) = x + 1.
Што? В данной формулировке утверждение неверно. Например, когда область определения и область значений функции не пересекаются. И даже если пересекаются: f(x) = x + 1.
http://www.cse.chalmers.se/research/group/logic/TypesSS05/Extra/geuvers.pdf теорема 2.12
как я выше написал, я сам не понимаю как оно так получается. подозреваю, что ф-ии лямбда исчисления это не те ф-ии которые в матанализе например, по этому для ф-ий из матана это не верно, но это не точно. отвечаю поздно, потому что был в бане.
как я выше написал, я сам не понимаю как оно так получается. подозреваю, что ф-ии лямбда исчисления это не те ф-ии которые в матанализе например, по этому для ф-ий из матана это не верно, но это не точно. отвечаю поздно, потому что был в бане.
> У любой функции есть fixed point
И вовсе не "у любой функции". А у любого терма из лямбда-исчисления, это совсем не значит "у любой функции".
И вовсе не "у любой функции". А у любого терма из лямбда-исчисления, это совсем не значит "у любой функции".
ну так application это один из лямбда термов, а application и есть ф-ия, не?
Но не любая, а из лямбда-исчисления.
Чтобы написать коммент, необходимо залогиниться
Рано или поздно оно само остановится. Или по стеку, или по памяти.
Может ещё по ограничителю глубины рекурсии выпасть, но это наш путь.