Почему это кодирует, вызывают переполнение стека?

Вы можете проверить среднее значение C, если оно равно 0, тогда все значения C равны нулю для B,

SELECT A 
FROM table
GROUP BY A
HAVING SUM(ABS(C))=0
7
задан g06lin 17 April 2009 в 23:20
поделиться

4 ответа

Your second algorithm creates a n-long chain of lambda procedures, each containing a reference to the previous one. I don't know exactly what Ruby does, but in a properly tail-recursive language the stack would not overflow in your second algorithm, because k.call in the lambda is also in tail position. If, as Brian's experiment suggests, Ruby doesn't have proper tail calls, the n-long chain of nested calls to the lambda will overflow the stack when the head of the chain is invoked, even though Ruby is smart enough to convert the tail-recursive factorial call into a loop (= tail-call optimisation).

9
ответ дан 6 December 2019 в 15:31
поделиться

В большинстве языков вызовы функций идут в стек вызовов , который на самом деле является просто стеком , Вызов функции рекурсивно продолжает добавлять в стек вызовов. В конце концов вы заполняете стек и получаете переполнение стека. Это всегда опасно при запуске рекурсивной функции, когда ваш уровень рекурсии будет глубоким.

3
ответ дан 6 December 2019 в 15:31
поделиться

По той же причине, что у первой переполнение стека ... Слишком велик стек вызовов.

2
ответ дан 6 December 2019 в 15:31
поделиться

Как и в первой функции, рекурсивные вызовы могут оказаться слишком большими для обработки системой.

0
ответ дан 6 December 2019 в 15:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: