Torkelndes Rentier?
Hier ist die Aufgabe:
Das habe ich soweit:
public static long waysHome(int length, int x, int y) {
if (x == length && y == 0) { // Base case: reached the end
return 1;
} else if (x > length || y < 0 || y > (length - x)) { // Edge case: exceeded the boundary
return 0;
} else {
// Recursive case: count the number of ways to reach the end by going right and swaying left or right
return waysHome(length, x + 1, y) + waysHome(length, x + 1, y + 1) + waysHome(length, x + 1, y - 1);
}
}
Leider funktioniert es nicht. Wäre cool, wenn ihr mir hilft .
1 Antwort
![](https://images.gutefrage.net/media/user/petermaier11/1673631593591_nmmslarge__0_0_800_800_652274479ef18736e8e74e289a116f5b.jpg?v=1673631594000)
Ich vermute, der Fehler liegt in dieser Zeile:
return waysHome(length, x + 1, y) + waysHome(length, x + 1, y + 1) + waysHome(length, x + 1, y - 1);
Genauer gesagt ist der erste Funktionsaufruf zu viel. Er schwankt ja immer nach rechts oder links; aber der Fall, nicht zu schwanken, sondern nur vorwärts zu gehen, kommt nicht vor. Ohne diesen Term terminiert es bei mir jedenfalls.
![](https://images.gutefrage.net/media/user/petermaier11/1673631593591_nmmslarge__0_0_800_800_652274479ef18736e8e74e289a116f5b.jpg?v=1673631594000)
Würde ich theoretisch auch sagen. Praktisch tut es das aber bei mir nicht, was ich mir nicht erklären kann.
![](https://images.gutefrage.net/media/user/petermaier11/1673631593591_nmmslarge__0_0_800_800_652274479ef18736e8e74e289a116f5b.jpg?v=1673631594000)
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Bei mir terminiert der Code des Fragestellers, braucht allerdings in der Größenordnung eine Minute.
(Falls es interessiert: er ruft die Funktion 2677380022-mal auf.)
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
Also sollte ich es lassen oder wie soll ich machen?
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
Also sollte das waysHome(length, x + 1, y) weg aus der return
![](https://images.gutefrage.net/media/user/petermaier11/1673631593591_nmmslarge__0_0_800_800_652274479ef18736e8e74e289a116f5b.jpg?v=1673631594000)
Terminieren müsste es auch mit diesem Fall - x erhöht sich ja in jedem Fall um 1.