# zinsen rekursiv/iterativ



## k. (7. Aug 2007)

hallo,
folgende aufgabenstellung:
am anfang des jahres wird jeweils 1000 euro auf das konto eingezahlt. zinsen am 31.12. sind 5%. diese zinsen werden wieder angelegt. am 31.12.04 beträgt das guthaben also 1.05*1000 = 1050, am 31.12.05 2152,50.

jetzt soll ich eine linear rekursive funktion schreiben, die das guthaben nach n Perioden ermittelt.
folgendermaßen siehts bei mir aus

```
public static double Zinsberechnung_rek(double Guthaben, int Perioden)
	{
		if (Perioden <= 0 )
				return Guthaben;
		
		Guthaben += 1000; // Einzahlung am Jahresbeginn
		Guthaben *= 1.05; // Zins am Jahresende
		
		return Zinsberechnung_rek( Guthaben, Perioden - 1);
	}
```
ich will als parameter aber nur die perioden....


----------



## der JoJo (7. Aug 2007)

mach eine private classenvariable
#edit sry, falsch verstanden:

mach eine ansprungmethode in der art:
fangAn(perioden)
{
  return machWasDuWillst(1000,perioden);
}


----------



## SlaterB (7. Aug 2007)

dann arbeitete nur mit dem Rückgabewert, rufe erst n-mal die Operation auf,
gib bei <= 0 einen Startwert zurück und erhöhe den bei jedem return


----------



## jPat (7. Aug 2007)

So sollte es auch gehen .... 


```
Class Recursiv {
// Irgendwo ne main

Static double guthaben = 1000d; // Startguthaben

public static double Zinsberechnung_rek(int Perioden)
   {
      if (Perioden <= 0 ) // (oder = 0 ? )
            return Guthaben;
      
      Guthaben += 1000; // Einzahlung am Jahresbeginn
      Guthaben *= 1.05; // Zins am Jahresende
      
      return Guthaben + Zinsberechnung_rek( Perioden - 1);
   } 
}
```

(Glaub ich ...)


----------



## SlaterB (7. Aug 2007)

Glauben ist nicht alles


----------



## Guest (7. Aug 2007)

danke, ich machs mit der ansprungmethode;

das beispiel funktioniert so nicht, da 1.) guthaben nicht definiert ist und 2.) dann nur das Guthaben einer Einzahlung+Zinsen dazu dazugezählt werden würde


----------



## Guest (7. Aug 2007)

ok, guthaben ist definiert (hab ich übersehn; is aber auch klein geschrieben, also Guthaben ist dann nicht definiert )
klappt aber trotzdem nicht so


----------



## jPat (7. Aug 2007)

Kleinlich sei  ...  


```
static double Guthaben = 0; // Startguthaben

		public static double Zinsberechnung_rek(int Perioden)
		   {
		         if (Perioden == 1 ) 
		            return Guthaben;
		     
		      Guthaben += 1000; // Einzahlung am Jahresbeginn
		      Guthaben *= 1.05; // Zins am Jahresende
		     
		      return Guthaben + Zinsberechnung_rek( Perioden - 1);
		   }
```


----------



## SlaterB (7. Aug 2007)

lästerst du nur oder hast du Fragen zu dem Beispiel? 
(außer 'bitte korrekt posten', obwohl darauf vielleicht auch jemand antwortet  )

viel eleganter wäre, das ganze ohne Exemplarvariable zu lösen

@jPat: wieso postest du nun schon mehrere Versionen, ohne sie einmal zu testen?


----------



## jPat (7. Aug 2007)

```
static double Guthaben = 0; // Startguthaben

		public static double Zinsberechnung_rek(int Perioden)
		   {
		      if (Perioden == 0 ) 
		            return Guthaben;
		     
		      Guthaben += 1000; // Einzahlung am Jahresbeginn
		      Guthaben *= 1.05; // Zins am Jahresende
		     
		      return Zinsberechnung_rek( Perioden - 1);
		   }
```


----------



## SlaterB (7. Aug 2007)

grummel, scheint zu stimmen 

aber wehe man ruft die Operation zweimal auf  :bae:, oder gar mit Periode -1


----------



## jPat (8. Aug 2007)

???:L


----------



## der JoJo (8. Aug 2007)

jPat hat gesagt.:
			
		

> ???:L


bei zweimaligem aufruf wird mit dem letzten wert weiter gerrechnet
und bei periode=-1 entsteht eine endlosschleife


----------



## mikachu (8. Aug 2007)

führ das mal mit einigen vielen perioden aus 
BOOOM macht der speicher 

#edit 1:
einfache mathematische formel:

```
public static double Zinsberechnung(int Perioden) // geht einfacher und ist ressourcenschonender
{
    return Math.pow( 1.05, perioden ) * 1000;
}
```

#edit 2:
passt zwar nicht hier rein, weil iterativ oder rekursiv, aber naja, wollt mal meinen senf dazu geben :lol:


----------



## jPat (8. Aug 2007)

:applaus: 
Ach, dann fragt es doch einfach in einer if - Anweisung ab ...
Es ging nur um die Funktionalität, ich erhebe keinen Anspruch auf das Copyright   , daher könnt ihr mit der Funktion machen, was ihr wollt :lol: .

Ist eh Käse das in einer statischen Art und Weise zu implementieren, aber du hast ja so angefangen, und ich wollte nicht, das du jar nischt mehr verstehst. :wink:


----------



## jPat (8. Aug 2007)

mika.fhdw hat gesagt.:
			
		

> führ das mal mit einigen vielen perioden aus
> BOOOM macht der speicher
> 
> #edit 1:
> ...



Siehe aufgabenstellung  :gaen: 

Mit welchen werten rechnest du denn?? 100, 1000 , 10000, Viel spaß beim Sparen !! :lol: 

in 10.000 Jahren haben deine for(int i = 0; i<10000;i++) System.out.print("Ur"); Enkel einen schönen betrag auf der Bank ....


----------



## Tobias (8. Aug 2007)

Jedes Jahr eine neue Generation von Enkeln? Ganz schön produktiv ... 

mpG
Tobias


----------



## jPat (8. Aug 2007)

i+= :?:

Wie lange leben die Leute dann?

Wann / Wie bekommen sie ihre kinder?

Also, wenn geklont wird , kann man schon jedes Jahr eine neue Generation erzeugen .... :wink:  

Bitte um Vorschläge  :bae:


----------

