---
title: "Varför fungerar inte min rekursion i båda fallen?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/133847-varför-fungerar-inte-min-rekursion-i-båda-fallen"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "FreeZer"
published: "2005-09-06T20:24:06.000Z"
updated: "2005-09-06T20:24:06.000Z"
replies: 0
views: 257
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/133847-varför-fungerar-inte-min-rekursion-i-båda-fallen"
---

# Varför fungerar inte min rekursion i båda fallen?

## #1 — FreeZer, 2005-09-06T20:24Z

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å?

Permalänk: https://www.webforum.nu/p/133847

---

Tråden på webben: https://www.webforum.nu/amne/programmering/133847-varför-fungerar-inte-min-rekursion-i-båda-fallen
