Доброго времени суток уважаемые знатоки. Пишу программку и возникла проблема :
Мне необходима функция которая бы вызывала сама себя ( рекурсивная ) и выполняла следующее действия:
Заносила в массив array[1..10] of integer значение first^.inf , не кольцевого списка.
Как я понимаю, функция должна после выполнения присваивания И-тому элементу массива значения из списка перейти к другому элементу , притом зделать это вызвав саму себя ( прокрутив сценарий повторно но с учетом что и:=и+1 ). Звучит бредово и я знаю , что тут попахивает китайским комсомолом ( можно мою проблему без рекурсии решить в 4 строки текста программы ) , но так сказано в тексте задачи. Идей было много , но не один из моих методов не работает.
Надеюсь на вас!
Рекурсивный просмотр списка.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Код: Выделить всё
type
TInf=......;
PItem=^Titem;
TItem=record
inf:TInf;
next:PItem;
End;
TStorage=array[1..N] of TInf;
function SaveToAray(Item:PListItem, Srorage:TStorage,Pos:integer, Limit:integer):integer;
begin
if (Item=nil) or (Pos>Limit) then SaveToAray:=0 else begin
Storage[Pos]:=Item^.Inf;
SaveToAray:=SaveToAray(Item^.Next,Srorage,succ(Pos),Limit)+1;
end;
end;
Вызывается:
X:=SaveToAray(First,Buf,1,N);
Возвращает количество элементов записанных в массив, начиная с указаной позиции.
Идея, надеюсь понятна: Если не конец списка или массива, то записываем и на рекурсивном спуске переходим к следующему. На подъёме вычисляется количество элементов, путем прибавления единицы.
Огромное спасибо за поддержку в трудную минуту
.
Отличное решение проблемы! Правда, описание массива в переменных функции - излишне. Возможно я просто не допонимаю его необходимость. Если Вам не составит труда - объясните.

Отличное решение проблемы! Правда, описание массива в переменных функции - излишне. Возможно я просто не допонимаю его необходимость. Если Вам не составит труда - объясните.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Можете убрать, но тогда функция сможет работаь только с одним глобально объявленным массивом. А так ей можно указать любой. Массив данного типа.
Можно пойти еще дальше, и при {$R-} (выключенной проверке выхода за границы диапазона) передавать указатель на массив array[0..0] of. В этом случае можно будет пользоваться любыми массивами, главное, чтобы базовый тип массива совпадал.
Можно пойти еще дальше, и при {$R-} (выключенной проверке выхода за границы диапазона) передавать указатель на массив array[0..0] of. В этом случае можно будет пользоваться любыми массивами, главное, чтобы базовый тип массива совпадал.