Начав изучать шепот, я натолкнулся на термин рекурсивный хвост . Что это значит
Хвостовая рекурсия - это рекурсивная стратегия, при которой функция выполняет некоторую работу, а затем вызывает себя. «Хвост» относится к тому факту, что рекурсия находится в самом конце функции. Многие - особенно функциональные - компиляторы языков программирования могут превращать эти типы вызовов в итерацию, что означает, что хвостовая рекурсия в поддерживаемых языках может использоваться, не опасаясь переполнения стека, независимо от количества вызовов.
Начав изучать шепот, я натолкнулся на термин рекурсивный хвост . Что это значит
Очень просто, что такое оптимизация хвостового вызова? В частности, что это за небольшие фрагменты кода, где их можно применить, а где нет, с объяснением
Как мне разорвать петлю? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else if(product.toString.equals(product.toString.reverse)) largest=largest max product } } Как превратить вложенные циклы в хвостовую...
В настоящее время этот вопрос не очень подходит для нашего формата вопросов и ответов. Мы ожидаем, что ответы будут подтверждены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, споры, опрос или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и,...
У меня есть следующий кусок кода, который завершается с ошибкой: RuntimeError: превышена максимальная глубина рекурсии Я попытался переписать это, чтобы учесть оптимизацию хвостовой рекурсии (TCO). Я считаю, что этот код должен был быть успешным, если бы имелась ТШО. def trisum(n, csum): if n == 0:...
Мне кажется, что было бы идеально работать для оптимизации хвостовой рекурсии как в C, так и в C ++, но при отладке я никогда не вижу стека фреймов, который указывает на эту оптимизацию. Это хорошо, потому что стек говорит мне, насколько глубока рекурсия. Тем не менее, оптимизация тоже была бы...
Я почти понимаю, как работает хвостовая рекурсия и чем она отличается от обычной. Я только не понимаю, почему не требуется, чтобы стек запомнил свой адрес возврата. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * n); } int factorial (int...
Я нашел этот вопрос о том, какие языки оптимизируют хвостовую рекурсию. Почему C # по возможности не оптимизирует хвостовую рекурсию? В конкретном случае, почему этот метод не оптимизирован для создания цикла ( 32-разрядная версия Visual Studio 2008 , если это имеет значение) ?: private static void...
Я видел эту цитату на вопрос: какой хороший функциональный язык для создания веб-службы? Scala, в частности, не поддерживает исключение хвостовых вызовов, за исключением саморекурсивных функций, что ограничивает виды композиции, которую вы можете выполнять (это фундаментальное ограничение JVM)....
Функциональные языки приводят к использованию рекурсии для решения множества проблем, поэтому многие из них выполняют оптимизацию хвостового вызова (TCO). TCO вызывает вызовы функции из другой функции (или самой функции, в этом случае эта функция также известна как Tail Recursion Elimination,...
У меня есть хвостовой рекурсивный алгоритм поиска пути, который я реализовал в JavaScript, и я хотел бы знать, могут ли какие-либо (все?) Браузеры получить исключения переполнения стека....
Сегодня я обнаружил команду time в unix и подумал, что буду использовать ее, чтобы проверить разницу во времени выполнения между хвостовой рекурсивной и нормальной рекурсивной функцией в Haskell. Я написал следующие функции: --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1...
Вот фрагмент кода из документации для fs2 . Функция goрекурсивная. Вопрос в том, как узнать, безопасен ли он для стека, и как определить, является ли какая-либо функция безопасной для стека? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n: Long):...