Hyperfakultät

Sebaaaa

Aktives Mitglied
Hallo zusammen,
Mal wieder ne dumme Frage :D
Ich soll die Hyperfakultät
definiert als : Hyperfakultät: Hyper(N) = 1^1 ∙ 2^2 ∙ 3^3 ∙ 4^4 ∙ … ∙ NN .
berechnen.
z.B.: Bei n=3 soll 108 rauskommen.
und bei n=4 soll 27648 rauskommen.
ich hab schon ein wenig rumprobiert aber weiß nicht mehr weiter
ich weiß nicht genau wie ich das ganze umsetzen muss.
Mein Code:
Java:
public class HyperFactorial {

	public static long calculate(long n) {
		
		if ( n ==0){
			return 1;
		}
		long fakultaet = 1;
		for (int zahl=1; zahl<=n; zahl++) {
			
			for ( int i=0;i<n;i++){
				
				fakultaet = ((2*n)*(2+n))*n ;
			}
			}
		
			return fakultaet * calculate(n-1);
	}
}
 

knilch

Bekanntes Mitglied
Hi,
versuch mal so etwas:
Java:
public static void main(String[] args) {
	long fakultaet = 1;
	int n = 4;
	for (int i = 1; i <=n; i++) {
		fakultaet *= Math.pow(i, i);
	}
	
	System.out.println(fakultaet);
}
Allerdings ist bei n=8 schon fertig... d.h. bei n=9, 10 ... wirst du immer den selben Wert erhalten.
Dies ist wegen long. Wenn du fakultaet als double erstellst, kommst du weiter
 
Zuletzt bearbeitet:

njans

Top Contributor
Java:
 if ( n ==0){
            return 1;
        }

Das kannst du vereinfachen zu:
Java:
 if ( n < 2){
            return 1;
        }

Mir ist nicht ganz klar, was das werden soll:
Java:
 for ( int i=0;i<n;i++){
               
                fakultaet = ((2*n)*(2+n))*n ;
            }


Wenn du es iterativ machen willst kann man das so machen:
Java:
	public static long hyperFactulty(int n)
	{
		if (n <= 1)
		{
			return 1;
		}
		
		long result = 1;
		
		for (int i = 2; i <= n; i++)
		{
			result *= Math.pow(i, i); 
		}
		
		return result;
	}

Für deine rekursive Lösung musst du nur überlegen, wie du den rekursionsschritt machen willst. Deine Schleifen brauchst du bei der Rekursion nicht. Du kannst in jedem Schritt einfach den Wert N^N * calculate(N-1) zurückgeben.
 

Neue Themen


Oben