Ссылка на массив, глубина вызова функции, странные проблемы :(

 

Добрый день господа,


Возникла довольно странная проблема при работе с одномерными массивами и рекурсивными функциями. Имеется следующий псевдо код:


int masterarray[2];

recurstion(&array[], start, stop)

{

if(start > stop) { return(0); }

array[0] = start;

array[1] = stop;

recursion(array, start + 1, stop)

}


Вызов осуществляется подобным образом

recursion(masterarray, 1, 10)


Проблема в том что с каждой большей глубиной рекурсии, данные пишутся в массив masterarray но массив этот остается 0го уровня рекурсии. Т.е например для 3го уровня рекурсии у меня должны быть данные в массиве с именем masterarray но эти данные должны отличаться от данных в массиве с именем masterarray для 0го уровня рекурсии.


Схема работы такая:

1 Массив - заполнение

2 Выбор элементов в массиве

З аполнение массива на промежутке между выбраными выше (пункт 2) элементами.

4 Повторять до тех пор пока точек между выбраными элементами (пункте 2) не станет 0

5 Последовательный выход из каждой рекурсии в предыдущую до уровня 0


Сама рекурсия - организованна правильно, проблема именно в том что при любом новой "глубине" данные пишутся в массив masterarray для стартового уровня (уровень глубины 0).


Отсюда вопрос, я использую ССЫЛКУ на массив &array[] (это позволяет присваивать значения элементам переданного массива), но как же тогда проблему хранения данных с учетом глубины рекурсии? Ведь при передачи массива НЕ В ВИДЕ ССЫЛКИ - значения его элементов нельзя изменять :( Скажу сразу что конкретной глубины рекурсии нет, т.е может быть 12 уровней а может быть и 50, поэтому создавать глобальные переменные и пытаться в зависимости от уровнях хрнаить в них - думаю тоже не вариант, хотя бы потому что передавать имя массива в виде arrayname+i (где i уровень глубины рекурсии) - в 4той версии языка - не получится :(


Выручайте ребят, подскажите как именно можно решить подобную задачу.


Спасибо заранее :)

 

Передаете ссылку на массив, поэтому используется только один массив, а не просто предыдущий.

 
Integer >>:

Передаете ссылку на массив, поэтому используется только один массив, а не просто предыдущий.

Я это понимаю :) Поэтому и пишу что если я передаю НЕ ССЫЛКУ - то нет возможности изменять элементы внутри фунцкции. Если передаю ссылку, то работа идет с конкретным массивом. Вот меня и интересует как передать аргументом МАССИВ но не ССЫЛКОЙ, и при этом иметь возможность ИЗМЕНЯТЬ ОБЬЕКТЫ ПЕРЕДАННОГО АРГУМЕНТОМ МАССИВА :)


Вот :) Спасибо за ответ!

 

Может вот так подойдет?

int recurstion(int &array[],int start,int stop){
   if(start > stop) { return(0); }
   int arr[2];
   arr[0] = start; // если массив большего размера, то весь скопировать, а потом подмену делать
   arr[1] = stop;
   recurstion(arr, start + 1, stop);
}
 
Не, что-то не так. Но факт, что надо объявлять еще один массив, перед возвратом надо еще что-то делать
 
Integer >>:

Может вот так подойдет?

Оно как бы подойдет да, но есть еще такой момент...


До вызова рекурсии первому и последнему элементу массива masterarray присваиваются уже конкретные определенные значения. Т.е грубо говоря рекурсия нужна для того чтобы "вращать" значения в элементах массива masterarray начиная с masterarray[1] и заканчивая masterarray[ArraySize(masterarray - 2)].


Поэтому мы имеем следующее


1. Задаем "начало" и "конец" в массиве masterarray

2. Вращаем все остальные элементы массива НЕ ТРОГАЯ первый и последний

3. При каждом очередном вращении - выполняем пункты начиная с 1го, до того момента пока данные не кончаться.


Т.е псевдо код меняется следующим образом:

int masterarray[2];

recurstion(&array[], start, stop)

{

if(start > stop) { return(0); }

array[0] = start;

array[1] = stop;

calculate(array);

recursion(array, start + 1, stop)

}


где calculate(array) функция которая получает "текущий" masterarray и по нему уже производит вычисления.