Hoppas ni står ut med lite delphi här...
Jag måste få förklarat varför min rekursion fungerar olika beroende på om jag använder mig av en for eller while loop...?
arr := 'ABC','abc','123'
{ Här använder jag en for-loop och det fungerar som det ska }
procedure f1(s:string;i:integer);
var
k:integer;
begin
if i = 4 then form1.memo1.lines.add(s)
else begin
for k := 1 to length(arr[i]) do begin
f1(s+arr[i][k],i+1);
end;
end;
end;
{ Här använder jag en while loop och då fungerar inte rekursionen
som den ska, kolla utskrift }
procedure f2(s:string;i:integer);
var
k:integer;
begin
if i = 4 then form1.memo1.lines.add(s)
else begin
while arr[i] <> '' do begin
f2(s+arr[i][1],i+1);
arr[i] := copy(arr[i],2,length(arr[i]));
end;
end;
end;
[B]f1('',1);[/B] //resultat av f1
Aa1
Aa2
Aa3
Ab1
Ab2
Ab3
Ac1
Ac2
Ac3
Ba1
Ba2
Ba3
Bb1
Bb2
Bb3
Bc1
Bc2
Bc3
Ca1
Ca2
Ca3
Cb1
Cb2
Cb3
Cc1
Cc2
Cc3
[B]f2('',1);[/B] //resultat av f2
Aa1
Aa2
Aa3
Som man kan se så fungerar rekursionen fint i f1, men i f2 fungerar bara rekursionen i sista steget, alltså att 1,2 och 3 blir rätt.
Varför blir det så?