-
> Конечно, тут рекурсия нужна.
За такое в эцих.
-
Ега, уверен. Дело в том, что, как заметил Правильный Вася, уровень вложенности неизвестен (последовательность A до F я дал как пример).
-
> она нужна, когда не известен заранее уровень вложенности
> циклов
Ну если у него строго 6 элементов - то да, нафиг не нужна. Если произвольное - то нужна.
А из вышеприведённого кода я бы chr выкинул и на константы заменил.
-
я понимаю, пятница - день тяжелый, но чем код не оптимален? и нафиг цикл? условие перебора в строго проеделенных пределах выполняется, что еще надо?
-
Повторюсь, глубина вложенности неизвестна. Сейчас пытаюсь реализовать рекурсию.
-
> уровень вложенности неизвестен
Собственно, я так и думал. Иначе какое это студенческое задание.
viper, читай про рекурсию. Пробуй, пытайся. Если ты не способен самостоятельно это задание сделать - бросай эту профессию. Я серьёзно.
-
> не могу взять в толк АЛГОРИТМ перебора всех таких комбинаций
Алгоритм циклический.
В цикле последовательно перебираются все числа в диапазоне от [0..N^N - 1], где N - основание выбранной системы счисления (в твоем случае = 6)
Каждое из этих чисел для визуального представления кодируется поразрядно в соответствии с выбранной системой кодирования значений разряда (в твоем случае это коды символов от A до F)
-
> Повторюсь, глубина вложенности неизвестна.
а где это в задании сказано?
-
> но чем код не оптимален?
Зачем мильён раз char(i) вызывать?
-
ега, не стоит так сразу. Я хочу ПОНЯТЬ.
-
> char(i) вызывать
ну если так ;) Мне нравится, что автону нужно не только реализовать программу, но еще и оптимально)
-
Договоримся, что слева младший символ, справа старший.
1. Задаём и выводим мимимальное значение комбинации
2. Увеличиваем младший символ на 1
3. Если он стал больше максимально доступного в разряде,
то его сбрасываем на минимум и увеличиваем на 1 следующего по старшинству
и применяем к ниму правило 3.
4. Выводим результат.
5. Если не достигнут максимум (FFFFFF), то возвращаемся 2.
Два вложенных цикла и ни каких рекурсий.
-
Ега, объясните, как сделать рекурсию. Я НЕ могу разобраться.
-
Перепутал - младший справа.
-
-
Мне не нужна информация по поводу СС.
-
> Мне не нужна информация по поводу СС
Это почему же ?
-
> Ега, объясните, как сделать рекурсию. Я НЕ могу разобраться.
procedure TestRecurrence(const CurrLevel, MaxLevel : Integer);
begin
if CurrLevel>MaxLevel then Exit;
ShowMessage('Current level : ' + IntToStr(CurrLevel));
TestRecurrence(CurrLevel + 1, MaxLevel);
end;
Пример вызова:
TestRecurrence(1, 6);
-
Да потому что я думаю о рекурсии. Не могу понять. Вот:
const count=3;
var
Form1: TForm1;
counter: integer;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Clear;
counter := 1;
makecomb('');
end;
procedure TForm1.makecomb(s: string);
var i:integer;
res:string;
begin
for i := 64 to 67 do
begin
if i<>64 then
begin
res := res + chr(i);
end;
memo1.Lines.Add(res);
inc(counter);
if counter>3 then exit;
makecomb(res);
end;
end;
это неверно. Как же сделать верно?
-
Ега, о общих принципах рекурсии я знаю. Только как ее применить здесь? Объясните, подтолкните мысль, будьте снисходительней.