|
|
#1 |
|
Гость
|
Рекурсия, память
Axapta 3.0 SP4
Хотелось посмотреть, как Аксапта будет реагировать на рекурсию: Код: int rn(int i)
{
int loop(int _i)
{
int j = _i+1;
;
j = j>10?1:j;
return j;
}
do
{
loop(i);
}
while (true);
return i;
}Реальной задачи на самом-то деле - нет, но есть интерес |
|
|
|
|
#2 |
|
Программатор
|
KernelRollup (или как то так) какой?
|
|
|
|
|
#3 |
|
Участник
|
А где, собственно, рекурсия?
Я вижу только странный бесконечный цикл |
|
|
|
|
#4 |
|
Гость
|
с рекурсией будет ещё хуже - она у меня падает на 400-м шаге.
Последнее значение j до переполнения = 399 Ошибка времени выполнения. : Переполнение во внутреннем стеке исполнения кода. Код: int rn(int i)
{
int loop(int _i)
{
int j = _i+1;
;
j = j>600?1:j;
print j;
if (j<500)
loop(j);
return j;
}
do
{
loop(i);
}
while (true);
return i;
} |
|
|
|
|
#5 |
|
Участник
|
Только что проверил на АХ 2009. С первым заданием все ОК - утечек нет.
Второе вызывает переполнение внутреннего стека. Но, рекурсия глубиной 500 - маловероятно. Даже 399 - довольно много |
|
|
|
|
#6 |
|
Гость
|
cудя по инфо с этой странички:
http://forum.mazzy.ru/index.php?showtopic=881 Axapta 3.0 EE SP4 FP1 1951.4060 514-320 SP4 OP023-196 я так понимаю, что никаких 'kernel rollup' не накачено? То есть ядро не патчилось? |
|
|
|
|
#7 |
|
Гость
|
Цитата:
Код: int rn(int i)
{
int loop(int _i)
{
int j = _i+1;
;
j = j>600?1:j;
print j;
if (j<300)
loop(j);
return j;
}
do
{
loop(i);
}
while (true);
return i;
}
|
|
|
|
|
#8 |
|
Участник
|
У меня и такой вариант нормально.
Скорее всего, дело действительно в необходимости накатить какие-то патчи на kernell |
|
|
|
|
#9 |
|
Moderator
|
400 - это, вроде, стандартное ограничение на глубину вызовов методов и вложенных функций (прочитал в книге Еременко, Шашкова на стр.242)
|
|
|
|
|
#10 |
|
Программатор
|
KR 2 поставить надо ИМХО. Там с утечкой памяти пофиксино чегото было.
|
|
|
|
| За это сообщение автора поблагодарили: (1). | |
|
|
#11 |
|
Гость
|
спасибо за совет. окончательно расстроился на этом...
Код: do
{
}
while (true) |
|
|