Rekursion bei get-Methode

mR.fLopPy

Erfahrenes Mitglied
Hallo!

Ich habe folgendes Problem und zwar wurde uns aufgetragen dass wir die Fakultät einmal iterativ und einmal rekursiv lösen, was an und für sich kein Problem darstellt. In einer weiteren Aufgabe mussten wir diese jedoch mit einer get-Methode aus einer anderen Klasse aufrufen und nunja, wir haben keine Ahnung wie man bei der Rekursion das Problem umgeht, dass man keine Werte an die Methode übergeben darf. Wie sind verpflichtet dazu die Variable aus dem Konstruktor zu nehmen.

Hier ist der Code:

Code:
package ab5;

public class Fakultaet {

      int n;
      public Fakultaet(int n) {
            this.n = n;
      }
      
      public void setValue(int m){
            this.n=m;
      }
      
      public int getValue(){
            return this.n;
      }
       public long getResultIterative() { 
            int count=1;
            if (n==0){count=0;}
            for (int i=1; i<=n;i++){
             count = count * i;
            }return count;
      }
       
      public long getResultRecursive(){ // n muss oben verändert werden ohne bei iterative was zu verändern
             if (n==0) 
                   return 1;
                  if (n==1)
                        return 1;
                  else
                        this.n = n-1;
                        return getResultRecursive();
       }
}

(Ich hoffe ich konnte das so einigermaßen erklären)

Hat jemand für uns einen Ansatz der uns weiter helfen kann? Ich wäre dafür sehr dankbar.

Mit besten Grüßen
floppy
 
Hallo,

implementiert die rekursive Berechnung doch einfach in einer privaten Methode, die ein Argument erhält. Diese könnt ihr dann vom Getter aus aufrufen.

Grüße,
Matthias
 
Danke für deine prompte Antwort!

Wir haben das jetzt probiert und unsere normale Methode hinzugefügt, auf private gesetzt und rufen diese über die Get-Methode auf und übergeben der Methode die Variable n. Wir bekommen dennoch einen "stackoverflow" Error. Anscheinend mag er unsere Variable nicht, was irgendwie unverständlich ist, da bei der iterativen Get-Methode alles funktioniert hat.

Beste Grüße
 
Hallo,

schau mal hier
Code:
public class Fakultaet {

	int n;
	long fakIter = -1;
	long fakRek = -1;

	public Fakultaet(int n) {
		this.n = n;
	}

	public void setValue(int m) {
		this.n = m;
	}

	public int getValue() {
		return this.n;
	}

	public long getResultIterative() {
		if (fakIter == -1) {
			fakIter = getResultIterative(n);
		}
		return fakIter;
	}

	private long getResultIterative(int n) {
		for (int i = n - 1; i > 2; i--) {
			n *= i;
		}
		return n;
	}

	public long getResultRecursive() {
		if(fakRek == -1)
			fakRek = getResultRecursive(n);
		return fakRek;
	}

	private long getResultRecursive(int n) {
		if (n == 0 || n == 1) {
			return n;
		}
		return n * getResultRecursive(n - 1);
	}
}

Gruß

Sascha
 
Hallo Sascha!

Danke für deinen Lösungsvorschlag. Der hat uns sehr geholfen - besonders für das allgemeine Verständnis (auch wenn unser Ansatz zur Berechnung etwas umständlicher ist).

Jedenfalls wart ihr beide uns eine Hilfe!

Beste Grüße und angehemes Wochenende,
floppy
 
Zurück