# Summe



## konoha (12. Nov 2015)

Ich habe folgende aufgabe vorliegen ( siehe Screenshot). Kann mir jemand bitte erklären was "die Summe der drei Vorgänger einer ganzen Zahl" bedeutet?


----------



## Saheeda (12. Nov 2015)

Angenommen die 12 ist die Zahl, dann sind 9, 10 und 11 deren Vorgänger. Summe daraus ist 30.


----------



## Joose (12. Nov 2015)

Saheeda hat gesagt.:


> Angenommen die 12 ist die Zahl, dann sind 9, 10 und 11 deren Vorgänger. Summe daraus ist 30.



Wenn man nur diese Phrase ("die Summe der drei Vorgänger einer ganzen Zahl") der Aufgabe hernimmt dann stimmt deine Antwort.

Wenn man sich die Aufgabenstellung anschaut und die Aufgabe als Gesamtes liest dann ist es leider nicht ganz richtig  (aber danach hat der TE nicht gefragt).
Ich nehme an deine in der Aufgabenstellung erwähnten Funktion "fib" berechnet dir die Summe der ersten X Fibonacci Zahlen. Deine Methode soll "fib3" soll nun die X.Fibonacci Zahl berechnen und deren 3 (fibonacci) vorgänger summieren.

(So habe ich die Aufgabe verstanden )


----------



## konoha (12. Nov 2015)

Nun joose,

wie würde denn die formulierung aussehen wenn man es auf die gesamte aufgabenstellung bezieht?


----------



## Dompteur (12. Nov 2015)

konoha hat gesagt.:


> Ich habe folgende aufgabe vorliegen ( siehe Screenshot). Kann mir jemand bitte erklären was "die Summe der drei Vorgänger einer ganzen Zahl" bedeutet?


 
Ich interpretiere die Aufgabenstellung so:
fib3(n) = fib3(n-1) + fib3(n-2) + fib3(n-3),
wobei noch folgendes gilt:
fib3(0) = 1
fib3(1) = 1
fib3(2) = 2


----------



## Joose (12. Nov 2015)

Dompteur hat gesagt.:


> Ich interpretiere die Aufgabenstellung so:
> fib3(n) = fib3(n-1) + fib3(n-2) + fib3(n-3)



Leider nicht wirklich korrekt. Wenn dir "fib3" die Summe der 3. Fibonacci Vorgänger liefert dann liefert dir "fib3(n-1)" Auch nur die Summe von 3 Vorgängern usw. 
Deine Bedingungen von "fib3(0)=1" (usw.) stimmen zufällig aber es müsste jeweils die funktion "fib" sein nicht "fib3".



konoha hat gesagt.:


> wie würde denn die formulierung aussehen wenn man es auf die gesamte aufgabenstellung bezieht?



Das habe ich schon oben geschrieben.
Beispiel:
In deiner Aufgabe sollst du "fib3(42)" berechnen lassen.
-> fib3 addiert die 3 Vorgänger Zahlen und liefert die Summe als Ergebnis.

In der Methode "fib3" musst du dir also die 41.Zahl, die 40. Zahl und die 39.Zahl der Fibonacci Reihe ausrechnen.
Diese Zahlen werden addiert und das Ergebnis mittels return zurückgegeben.

EDIT: Leider wissen wir nicht was die Methode "fib", die im Skript auf Folie 161 erklärt ist, genau liefert. Liefert diese Methode die X.Zahl der Fibonacci Reihe oder die Summe aller Zahlen bis zur X.Zahl?


----------



## Dompteur (12. Nov 2015)

@Joose
Die Aufgabe geht davon aus, dass man die Fibonaccifolge kennt. Was ja kein Problem ist, da diese ja definiert ist:
fib(n) = fin(n-1) + fin(n-2)
Umgangssprachlich wird eine Fibonaccizahl als die Summe der beiden Vorgänger defniert.

Analog dazu soll eine neue Folge fib3 definiert werden.
Die 3 Vorgänger einer Zahl wären also die 3 vorherigen fib3 Werte der Folge.

Dazu passt auch die Angabe der 3 Startwerte. Die braucht man ja nur, damit fib3(3) gerechnet werden kann.
fib3(3) = fib3(2) + fib3(1) + fib3(0)
fib3(3) = 2 + 1 + 1 = 4

Natürlich könnte man die Aufgabenstellung exakter formulieren. Wahrscheinlich bezieht sie sich auch auf den Stoff, der da gerade im Kurs durchgemacht wird. Und hier fehlt da etwas der Kontext. Daher müssen wir interpretieren. ;-)


----------



## konoha (12. Nov 2015)

Das ist der auszug aus der folie. Ich habe aber so schlecht wie ich bin immer noch nicht ganz verstanden was ich machen soll. 

Wie kann ich das nun in java rekursiv umsetzen?


----------



## Dompteur (12. Nov 2015)

Na wunderbar. Euer Vortragender liefert euch falsche Angaben.
Das Fibonacci-Bildungsgesetz sieht so aus:
fib(0) = 1
fib(1) = 1
fib(n+1) = fib(n) + fib(n-1)     und nicht so, wie auf der Folie fib(n*+2*)

f(n+1) = f(n) + f(n-1)  ist übrigens gleichbedeutend mit : f(n) = f(n-1) + f(n-2) 

Da ihr ja gerade Rekursionen durchmacht (siehe dein Thread http://www.java-forum.org/thema/fakultaet.170358), würde ich fib3 auch als rekursive Funktion, so wie ich sie in meinem ersten Beitrag beschrieben habe, umsetzen.


----------



## Joose (12. Nov 2015)

Dompteur hat gesagt.:


> Analog dazu soll eine neue Folge fib3 definiert werden.
> Die 3 Vorgänger einer Zahl wären also die 3 vorherigen fib3 Werte der Folge.



Ok jetzt versteh ich was du genau gemeint hast.
Da hast du natürlich recht, klingt logisch


----------



## konoha (12. Nov 2015)

Dompteur hat gesagt.:


> fib(0) = 1
> fib(1) = 1
> fib(n+1) = fib(n) + fib(n-1)     und nicht so, wie auf der Folie fib(n*+2*)
> 
> f(n+1) = f(n) + f(n-1)  ist übrigens gleichbedeutend mit : f(n) = f(n-1) + f(n-2)



Heißt also ich muss für fib3 - + f(n-3) hinten dranschreiben?
Nur eine frage am ende, wenn ich jetzt allerdings für n die Zahl 3 einsetze:
f(n) = f(n-1) + f(n-2)+f(n-3)
f(3) = f(3-1) + f(3-2) +f(3-3)
f(3)=2+1+0
f(3)=3

Stimmt das?


----------



## Dompteur (12. Nov 2015)

konoha hat gesagt.:


> Heißt also ich muss für fib3 - + f(n-3) hinten dranschreiben?


Ich habe das bereits beantwortet: http://www.java-forum.org/thema/summe.170359/#post-1071636



konoha hat gesagt.:


> Nur eine frage am ende, wenn ich jetzt allerdings für n die Zahl 3 einsetze:
> f(n) = f(n-1) + f(n-2)+f(n-3)
> f(3) = f(3-1) + f(3-2) +f(3-3)
> f(3)=2+1+0
> ...


Nein, die richtige Lösung steht hier: http://www.java-forum.org/thema/summe.170359/#post-1071639


----------



## Dompteur (12. Nov 2015)

sorry, Doppelpost


----------



## konoha (12. Nov 2015)

Dompteur hat gesagt.:


> Ich habe das bereits beantwortet: http://www.java-forum.org/thema/summe.170359/#post-1071636
> 
> 
> Nein, die richtige Lösung steht hier: http://www.java-forum.org/thema/summe.170359/#post-1071639



Wie kommdt du bei der letzten fib3(n-3) auf die 1?
Wenn die zahl doch null ergibt fib3(3-3)?


----------



## Dompteur (12. Nov 2015)

konoha hat gesagt.:


> Wie kommdt du bei der letzten fib3(n-3) auf die 1?
> Wenn die zahl doch null ergibt fib3(3-3)?


Weil in der Angabe steht, dass fib3(0) = 1 ist.


----------



## konoha (12. Nov 2015)

Dompteur hat gesagt.:


> Weil in der Angabe steht, dass fib3(0) = 1 ist.


Wenn ich dies aber jetzt in java umsetzen soll, kann ich dann ja nicht fuer fib3(n-3) nehmen oder? Denn sobald eine 3 für n eingesetzt wird. Wird der werr fib3 zur 0 und nicht zur gewuenschten 1?


----------



## Dompteur (12. Nov 2015)

Da du die Funktion selbst schreibst, kannst du sie ja so formulieren, dass bei einem Aufruf mit dem Wert 0 das Ergebnis 1 lautet.


----------



## konoha (13. Nov 2015)

Das Programm gibt mir nichts aus? weiß jemand warum?


```
public static void main (String[]args) {
   
    fib3(8);
   
   
    }
   
    public static int fib3(int n){
   
        if(n<4)
            return 1;
        else
            return fib3(n-2)+fib3(n-1)+fib3(n-1);
   
   
    }
}
```


----------



## Joose (13. Nov 2015)

Ja weil du nirgends geschrieben hast das der Code etwas auf der Konsole ausgeben soll. Vielleicht solltest du ein "System.out.println" einbauen 

Nochmal zur erklärung der Schreibweise von oben (weil du immer wieder durcheinander kommst was nun parameter ist und was ergebnis)
fib3(0) = 1
fib3 .... ist der Methodenname
(0) .... der parameter
1 .... das ergebnis


----------



## konoha (14. Nov 2015)

okay danke joose. also bei   fib3(5); gibt er mir eine 7 aus, und bei fib3(4) eine 3. kommt das hin mit den fibonacci zahlen mit 3 startwerten?


----------

