# Rekursive lösung von pascal dreieck



## Unkownsyntax (14. Mai 2009)

Hallo hab mal ne frage ... zu einen Thema:

Ich soll in Java ein Programm erstellen, mit dem man eine bestimmte Stelle des Pascal`schen Dreiecks iterativ berechnen kann(Beispiel P(0, 0) ist gleich 1, P(4, 2) ist gleich 6.).
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

Bin jetzt zu diesen Code gekommen also:

public static int function_pascal(int zeile, int spalte) {
if (spalte==0 || spalte==zeile)
return 1;
return function_pascal(zeile-1,spalte) + function_pascal(zeile-1,spalte-1);
}

Bin mir aber nicht ganz sicher ob der stimmt da ich das von unten nach oben auflösen von rekursionen nicht wirklich behersche.

Kann mir vl da ein paar beispiele aufschreiben und schritt für schritt lösen ?

lg daniel


----------



## SlaterB (14. Mai 2009)

dein Code ist noch nicht korrekt,
function_pascal(1,1) führt zu function_pascal(0,1) + function_pascal(0,0)
davon wird zuerst function_pascal(0,1) ausgerechet -> function_pascal(-1,1) -> function_pascal(-2,1) -> -3,1 -> -4,1 usw

was meinst du mit Beispielen? sowohl auf Papier als auch die Rechnung des PCs kannst du doch gut selber nachvollziehen oder woran scheiterst du?


----------



## Unkownsyntax (14. Mai 2009)

versteh ich jetzt nicht was nicht korrekt ist weil wenn ich wie du gesagt 1,1 habe wird sowieso 1 ausgegeben bei der if anweisung vorher ja geschaut wird ob zeile = spalte ist .

Was ist jetzt am code falsch?

ja das von hinten auflösen vom code ...


----------



## SlaterB (14. Mai 2009)

ok, schlechtes Beispiel von mir, da gerade zufällig 1==1, 
neues Beispiel:
function_pascal(1,2) führt zu function_pascal(0,2) + function_pascal(0,1)
davon wird zuerst function_pascal(0,2) ausgerechet -> function_pascal(-1,2) -> function_pascal(-2,2) -> -3,2 -> -4,2 usw

(Spalte =1 durch =2 ersetzt  )


----------



## Unkownsyntax (14. Mai 2009)

Hm ok weiß was du meinst dass die zeile eigentlich nie ausgerechnet wird oder? Wie wär es dann richtig oder wie änder ich das am besten um?


----------



## SlaterB (14. Mai 2009)

mal dir das Dreieck auf Papier auf, suche die Stelle, die (1,2) entspricht, 
dem Beispiel, welches ich genannt hatte,

dann schaue bewußt nach, was du selber auf dem Papier machen würdest, um diesen Wert zu berechnen,
du würdest doch auch zwei andere Zahlen,
vergleiche also Schritt für Schritt, was auf dem Papier passiert, mit dem was das Programm macht,
immer dann wenn du auf dem Paier aufhörst, weil irgendeine Knate/ Ecke erreicht ist, muss auch das Programm aufhören


----------



## Unkownsyntax (14. Mai 2009)

function_pascal(zeile-1,spalte-1) + function_pascal(zeile-1,spalte);  so oder?


----------



## SlaterB (14. Mai 2009)

die Reihenfolge ist egal,

wichtig sind die Randbedingungen,
wenn du nur spalte prüfst, geht zeile ins negative, von einigen glücklichen Situationen (zeile == spalte) abgesehen


----------



## Unkownsyntax (14. Mai 2009)

ja hab jetzt den code so geschrieben:

int Pascal(↓int i ↓int j){

if(i<0 || j<0 || j>i){
return null			//Außerhalb des Dreiecks
}

if (j==0 || j==i){ 
	return 1 
	}
else {
	return Pascal(i-1,j-1) + Pascal(i-1,j)
	}
}

i ist reihe j spalte

Verwendete sprache jana is abgeleite von java keine strichpunkte usw.


----------



## Unkownsyntax (14. Mai 2009)

ist es so jetzt korrekt?


----------



## SlaterB (14. Mai 2009)

ich habe gar keine Lust mehr, immer auf das gleiche hinzuweisen,
der Code hat sich bisher nicht wesentlich verbessert, 
und selbst wenn, könntest du das ja selber durch einfachstes testen herausfinden,
von meinen Ideen wie 'auf Papier ausprobieren' hälst du anscheinend nicht viel,


----------



## Unkownsyntax (14. Mai 2009)

ja e wenn ich für i = 2 setzte und j = 1 setzte wird aus pascal(2,1) --> pascal(1,0) + pascal (1,1) pascal 1,0 wird 1 rückgegeben und bei pascal 1,1 auch eins also insgesamt 2 was auch im dreieck steht


----------

