Deine Rekursion funktioniert nicht, weil …

… Deine Verzweigungen alle ihre Nachbarn abarbeiten, bevor Dein Ursprungsfeld mit seinem nächsten Nachbarn fortfährt.

Du gehst zuerst soweit es geht nach rechts, dann von jenem Feld aus soweit wie möglich nach oben (nach links geht nicht, da kommst Du her, die Felder sind nicht mehr frei). Erst wenn es keine unbesuchten Nachbarfelder mehr gibt gehst Du den Weg wieder zurück zur nächsten möglichen Kreuzung.

Dein Algorithmus auf einem 5x5-Feld bei Start in der Mitte:
item(3, 2, 1)
Show Plain Text
  1. 0  0  0  0  0
  2. 0  0  1  0  0
  3. 0  0  0  0  0


rechts = 0 => item(4, 2, 2)
Show Plain Text
  1. 0  0  0  0  0
  2. 0  0  1  2  0
  3. 0  0  0  0  0


rechts = 0 => item(5, 2, 3)
Show Plain Text
  1. 0  0  0  0  0
  2. 0  0  1  2  3
  3. 0  0  0  0  0


rechts ≠ 0, links ≠ 0, oben = 0 => item(5, 1, 4)
Show Plain Text
  1. 0  0  0  0  4
  2. 0  0  1  2  3
  3. 0  0  0  0  0


rechts ≠ 0, links = 0 => item(4, 1, 5)
Show Plain Text
  1. 0  0  0  5  4
  2. 0  0  1  2  3
  3. 0  0  0  0  0


rechts ≠ 0, links = 0 => item(3, 1, 6)
Show Plain Text
  1. 0  0  6  5  4
  2. 0  0  1  2  3
  3. 0  0  0  0  0


rechts ≠0, links = 0 => item(2, 1, 7)
Show Plain Text
  1. 0  7  6  5  4
  2. 0  0  1  2  3
  3. 0  0  0  0  0


rechts ≠ 0, links = 0 => item(1, 1, 8)
Show Plain Text
  1. 8  7  6  5  4
  2. 0  0  1  2  3
  3. 0  0  0  0  0


rechts ≠ 0, links ≠ 0, oben ≠ 0, unten = 0 => item(2, 1, 9)
Show Plain Text
  1. 8  7  6  5  4
  2. 9  0  1  2  3
  3. 0  0  0  0  0


rechts ≠ 0 => item(2, 2, 10)
Show Plain Text
  1. 8  7  6  5  4
  2. 9  10 1  2  3
  3. 0  0  0  0  0


rechts ≠ 0, links ≠ 0, oben ≠ 0, unten = 0 => item(2, 3, 11)
Show Plain Text
  1. 8  7  6  5  4
  2. 9  10 1  2  3
  3. 0  11 0  0  0


rechts = 0 => item(3, 3, 12)
Show Plain Text
  1. 8  7  6  5  4
  2. 9  10 1  2  3
  3. 0  11 12 0  0


rechts = 0 => item(4, 3, 13)
Show Plain Text
  1. 8  7  6  5  4
  2. 9  10 1  2  3
  3. 0  11 12 13 0


rechts = 0 => item(5, 3, 14)
Show Plain Text
  1. 8  7  6  5  4
  2. 9  10 1  2  3
  3. 0  11 12 13 14


rechts ≠ 0, links ≠ 0, oben ≠ 0, unten ≠ 0 => zurück in Funktion (n = 13)
rechts ≠ 0, links ≠ 0, oben ≠ 0, unten ≠ 0 => zurück in Funktion (n =12)
rechts ≠ 0, links ≠ 0, oben ≠ 0, unten ≠ 0 => zurück in Funktion (n = 11)
rechter Abzweig schon erledigt, links = 0 => item(1, 3, 12)
Show Plain Text
  1. 8  7  6  5  4
  2. 9 10  1  2  3
  3. 12 11 12 13 14



Dein Call-Stack sieht so aus:
Show Plain Text
  1. item(3, 2, 1)
  2. |-- item(4, 2, 2)
  3. |   '-- item(5, 2, 3)
  4. |       '-- item(5, 1, 4)
  5. |           '-- item(4, 1, 5)
  6. |               '-- item(3, 1, 6)
  7. |                   '-- item(2, 1, 7)
  8. |                       '-- item(1, 1, 8)
  9. |                           '-- item(2, 1, 9)
  10. |                               '-- item(2, 2, 10)
  11. |                                   ‘-- item(2, 3, 11)
  12. |                                       |-- item(3, 3, 12)
  13. |                                       |   '-- item(4, 3, 13)
  14. |                                       |       '-- item(5, 3, 14)
  15. |                                       '-- item(1, 3, 12)