PDA

Просмотр полной версии : Не работает рекурсивная функция


A.E.M.
15.06.2008, 21:17
В книге Мука предлагают написать рекурсивную функцию для обработки любого количества вложенных массивов внутри массива... Передавать ей два параметра - сам массив и разделитель, который ставить между элементами. (например myFunc(myArray," || ")). Так вот, нужно чтобы, не смотря на то, сколько вложенных массивов в массиве myArray и сколько вложенных массивов внутри вложенных, возвращалась строка с перечислением всех элементов, между элементами должен ставится разделитель " || ".

Вот моя функция, не могу понять почему не работает...


function vivodMassiv(array, delimiter) {
var strEnd = "";
for (i=0; i<array.length; i++) {
if (array[i] instanceof Array) {
strEnd += vivodMassiv(array[i], delimiter, 1);
} else {
strEnd += array[i]+delimiter;
}
}
return strEnd;
}

MrPoma
15.06.2008, 21:34
function vivodMassiv(array:Array, delimiter:String):String{
var strEnd:String = '';
for (var i:Number = 0; i < array.length; i++) {
if (array[i] instanceof Array) {
strEnd += vivodMassiv(array[i], delimiter);
} else {
strEnd += array[i] + delimiter;
}
}
return strEnd;
}

var s:String = vivodMassiv([0, 1, [2, [3, 4], 5]], '-');
trace(s)

A.E.M.
15.06.2008, 22:40
function vivodMassiv(array:Array, delimiter:String):String{
var strEnd:String = '';
for (var i:Number = 0; i < array.length; i++) {
if (array[i] instanceof Array) {
strEnd += vivodMassiv(array[i], delimiter);
} else {
strEnd += array[i] + delimiter;
}
}
return strEnd;
}

var s:String = vivodMassiv([0, 1, [2, [3, 4], 5]], '-');
trace(s)

Спасибо Вам огромное! Только вот поясните все же если не сложно... Ведь у меня все так же было написано... дело в том, что не указаны явно типы???

iNils
15.06.2008, 23:25
У вас переменная i была не локальная, поэтому в каждом вызове vivodMassiv цикл начинался не с 0, а продолжал использовать сатрое значение i

A.E.M.
15.06.2008, 23:49
спасибо!