Передаете ссылку на массив, поэтому используется только один массив, а не просто предыдущий.
Передаете ссылку на массив, поэтому используется только один массив, а не просто предыдущий.
Я это понимаю :) Поэтому и пишу что если я передаю НЕ ССЫЛКУ - то нет возможности изменять элементы внутри фунцкции. Если передаю ссылку, то работа идет с конкретным массивом. Вот меня и интересует как передать аргументом МАССИВ но не ССЫЛКОЙ, и при этом иметь возможность ИЗМЕНЯТЬ ОБЬЕКТЫ ПЕРЕДАННОГО АРГУМЕНТОМ МАССИВА :)
Вот :) Спасибо за ответ!
Может вот так подойдет?
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); }
Оно как бы подойдет да, но есть еще такой момент...
До вызова рекурсии первому и последнему элементу массива 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 и по нему уже производит вычисления.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день господа,
Возникла довольно странная проблема при работе с одномерными массивами и рекурсивными функциями. Имеется следующий псевдо код:
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той версии языка - не получится :(
Выручайте ребят, подскажите как именно можно решить подобную задачу.
Спасибо заранее :)