Другие языки программирования и технологии

Рекурсия, возникли проблемы с изучением рекурсии, не могли бы подсказать книги или видео про обьяснение рекурсии

Здесь главное не перестараться с глубиной, а в остальном…
Вот простой пример на Паскале (сегодня студенту делал ;-)
{ Заполнение массива по спирали }
var Arr : array [1..19, 1..19] of Word; N, D : Byte;

procedure ShowArray(N, D : Byte);
var Row, Col : Byte;
begin
for Row := 1 to N do begin for Col := 1 to N do Write(Arr[Row, Col]:D); WriteLn; end;
end;

function Square(Row0, Col0, Row1, Col1 : Byte): Word;
var Num : Word; Row, Col : Byte;
begin
if Row0 = Row1 then begin Num := 1; Arr[Row0, Col0] := Num; end
else if Odd(Row1 - Row0) then
begin
Num := Square(Row0 + 1, Col0, Row1, Col1 - 1);
for Col := Col0 to Col1 do begin Inc(Num); Arr[Row0, Col] := Num; end;
for Row := Row0 + 1 to Row1 do begin Inc(Num); Arr[Row, Col1] := Num; end;
end
else
begin
Num := Square(Row0, Col0 + 1, Row1 - 1, Col1);
for Col := Col1 downto Col0 do begin Inc(Num); Arr[Row1, Col] := Num; end;
for Row := Row1 - 1 downto Row0 do begin Inc(Num); Arr[Row, Col0] := Num; end;
end;
Square := Num;
end;

begin
Write('Введите N (от 1 до 19) : '); ReadLn(N);
case N of
1..3 : D := 2;
4..9 : D := 3;
10..19 : D := 4;
else WriteLn('Значение N должно быть из диапазона от 1 до 19.'); Halt;
end;

Square(1, 1, N, N);
ShowArray(N, D);
end.
АГ
Александр Говоров
82 532
Лучший ответ