Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.85] |
|
Сообщ.
#1
,
|
|
|
Помогите написать рекурсивную процедуру нахождения минимального элемента в массиве.
|
Сообщ.
#3
,
|
|
|
Ну я знаю,что есть рекурсия и массивы )
просто мне не понятно как применить рекурсию для поиска мин.элемента. |
Сообщ.
#4
,
|
|
|
Ну как.. выделяешь первый элемент массива и сравниваешь его с минимальным из остальных елементов. Возвращаешь минимум из них. Если в массиве один элемент, возвращаешь его.
|
Сообщ.
#5
,
|
|
|
Че-т не то:
const N=3; procedure FindMin(a:array of integer;i,j:integer;var min:integer); begin if ((i=1) and (j=1)) then min:=a[1,1]; if (min>a[i,j]) then begin min:=a[i,j]; FindMin(a,i-1,j-1,min); end; end; begin end. |
Сообщ.
#6
,
|
|
|
Брр.. а зачем тебе два счетчика i и j?
Добавлено Вообще, рекурсивный вызов FindMin нужно ставить перед сравнением min и теущего элемента. Добавлено А еще, лучше оформи подпрограмму как функцию, а не процедуру. |
Сообщ.
#7
,
|
|
|
Ну а если массив двумерный?
Все равно не так: const N=3; function FindMin(a:array of integer;i,j:integer):integer; var min:integer; begin if ((i=1) and (j=1)) then FindMin:=a[1,1]; min:=FindMin(a,i-1,j-1); if (min>a[i,j]) then begin FindMin:=min; end; end; begin end. |
Сообщ.
#8
,
|
|
|
Цитата Monster @ А не все равно? Все, что тебе надо знать при использовании открытых массивов - это последовательность данных, и ее общая длина... Как организованы эти данные тебя не должно интересовать, и твою программу тоже. К примеру, ей должно быть неважно, или переданные данные означают массивНу а если массив двумерный? <1, 2, 3, 4, 5, 6> или это <1, 2, 3> <4, 5, 6> или <1, 2> <3, 4> <5, 6> Минимум все равно будет один и тот же... |
Сообщ.
#9
,
|
|
|
volvo877 ты прав.
Пишет Stack overflow: const N=3; function FindMin(a:array of integer;i:integer):integer; begin if (i=1) then FindMin:=a[1]; FindMin:=a[i]; if (FindMin(a,i)>a[i-1]) then FindMin:=a[i-1]; end; var i:integer;a:array [1..N] of integer; begin writeln('Enter array: '); for i:=1 to N do readln(a[i]); writeln('Min = ',FindMin(a,N)); readln; end. |
Сообщ.
#10
,
|
|
|
А так:
const n = 6; function FindMin(const a: array of integer; const n: integer): integer; var min: integer; begin if n = 1 then FindMin := a[0] else min := FindMin(a[1], pred(n)); if a[0] < min then min := a[0]; FindMin := min; end; const a: array[1 .. n] of integer = (10, 20, 3, 4, 5, 6); begin writeln(findmin(a, n)); end. Добавлено Ты не учел, в частности, что открытые массивы индексируются с 0, а не с 1... |
Сообщ.
#11
,
|
|
|
Да.Я просто с Си работал:там все с 0,а здесь то с 1,то с 0 ;-)
|