![]() |
|
||||||||||
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Насколько я знаю глубина ограничена 256 вызовами.
Однако сделав некий код, я обнаружил, что у меня (по крайней мере в флеш-проигрывателе флеш-редактора (8) что счет переваливает за 300. Последний раз редактировалось chingachgoog; 02.05.2007 в 13:18. |
|
|||||
|
выложи нормальную функцию, в этой нечерта не понятно.
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Что тут непонятного?
В рекурсивной функции стоит увеличитель счетчика zz перед вызовом функции он сбрасывается на ноль, после вызова выводиться в output. Причем тот же код в классике с факториалом явно не позволяет делать рекурсию длиннее 256 вызовов! function factorial(n) {
zz++
if (n == 0) {
return 1;
} else {
return n*factorial(n-1);
}
}
zz=0
trace(factorial(255));
trace(zz)
И выходит что делает она это иногда даже 303 раза! f_find=function(fName, fPath){ // Рекурсия
zz++
for (i in fPath) {
if (fPath[i]._name==fName) {
f_N= fPath[i]
return f_N
} else {
f_find(fName, fPath[i])
}
}
return f_N
}
Причем если расширить зону поиска, т.е. в начальную точку поска вбить не _root.mc1.mc2, а скажем _root.mc1 или просто _root, то предупреждение о переполнении стека в 256 все же следует! Последний раз редактировалось chingachgoog; 02.05.2007 в 13:56. |
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
То, что функция вызвалась 303 раза ещё не означает, что была она достигла такой же глубины рекурсии.
Из-за цикла: на одной глубине она вызывается несколько раз. Вот простой пример: function go(n) {
zz++;
if (n == 0) {
return;
}
for (var i=0; i<5; i++) {
go(n-1);
}
}
zz = 0;
go(5);
trace (zz);
Хотя максимальная глубина вызовов: 6. Последний раз редактировалось WindWalker; 02.05.2007 в 14:23. |
|
|||||
|
__________________
С моих слов записано верно. Мною прочитано.
|
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
Например, можно сделать zz параметром.
как вариант, можно оставить zz глобальной переменной, но перед вызовом увеличивать на 1, а после вызова - уменьшать. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Да, спасибо, такой вариант все правильно показывает
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|