Я знаю, что означает call stack size exceeded
, но мне нужно обойти его.Избегайте ошибки стека вызовов
я получаю, когда я называю эту рекурсивную функцию
function fill(x_y) {
var locColor = getPx(x_y[0], x_y[1]);
if (locColor != pref.color) {
setPx(x_y[0], x_y[1], pref.color);
if (getPx(x_y[0] - 1, x_y[1]) == locColor) {
fill([x_y[0] - 1, x_y[1]]);
}
if (getPx(x_y[0], x_y[1] - 1) == locColor) {
fill([x_y[0], x_y[1] - 1]);
}
if (getPx(x_y[0] + 1, x_y[1]) == locColor) {
fill([x_y[0] + 1, x_y[1]]);
}
if (getPx(x_y[0], x_y[1] + 1) == locColor) {
fill([x_y[0], x_y[1] + 1]);
}
}
}
Это для применения холста.
x_y
- это просто координаты x и y, где вызывается заполнение.
setPx
печатает прямоугольник на холсте с заданными координатами.
getPx
приобретает цвет прямоугольника холста дал это координаты
pref.color
цвет, который пользователь выбрал для setPx
Может ли эта функция быть сделано без рекурсии?
Да, я думаю, что каждая рекурсивная функция может быть переписана без рекурсии, хотя это не всегда лучше. Кстати, ваш код будет работать неопределенно (то есть до переполнения стека), если цвет 'getPx (x_y [0], x_y [1])' такой же, как 'pref.color'. – GolezTrol
О, спасибо. Я не понимал, что – Kerndog73
BTW. Если это кому угодно. Предел размера стека вызовов для хром - 20915. Я получил это от выполнения нескольких тестов с очень простой рекурсивной функцией. – Kerndog73