Java :: Aufgabe #206

2 Lösungen Lösungen öffentlich

Rekursieve Fakultät von n

Fortgeschrittener - Java von FHEM - 22.07.2018 um 19:09 Uhr
Erstelle ein programm das n! = 120 zum beispiel nach n auflöst.
Ansatz: 5! =5*4*3*2*1 also müsste n=120/5/4/3/2/1

Lösungen:

vote_ok
von nOrdan (1160 Punkte) - 10.06.2019 um 00:07 Uhr
Anmerkung: Wenn Zahlen wie 121 eingegeben werden kommt als Ergebnis trotzdem raus, dass die Fakultät von 121 5! ist. Ich wusste aber nicht wie ich dieses Problem lösen soll

Main-Klasse:

Quellcode ausblenden Java-Code


import Methodensammlung.Methoden;

/**
 * Für eine Zahl wird die zugehörige Fakultät berechnet
 * 
 * @author (nOrdan) 
 * @version (09.06.2019)
 */
public class Fakultät
{

    Methoden m = new Methoden();

    public static void main(String [] args)
    {
        Fakultät f = new Fakultät();
        f.inputs();
    }

    private void inputs()
    {
        boolean valid1 = false;
        int n = 0;
        while (valid1 == false)
        {
            String input1 = m.userInput("Geben sie ihre Zahl ein für welche die rekursive Fakultät berechnet werden soll");
            m.errorIntInput(input1);
            try
            {
                n = m.parseInt(input1);
                valid1 = true;
            }
            catch(Exception e)
            {
                m.errorMessage("Invalid user input","Invalid input");
            }        
            m.informationMessage("Die rekursive Fakultät für " + n + " ist " + berechnung(n),"Ergebnis");
        }
    }

    private int berechnung(int n)
    {
        for (int i = 1; i != n; i++)
        {
            n /= i;
        }
        return n;
    }
}



Methoden die ich aus meinem eigenem Methodensammlung package benutzt habe:

Quellcode ausblenden Java-Code

 public String userInput(String message)
    {
        return JOptionPane.showInputDialog(message);
    }

public int parseInt(String input)
    {
        return Integer.parseInt(input);
    }

   public void errorIntInput(String input)
    {
        if (input == null) 
        {
            System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet
        }
        else if (input.isEmpty() == true)
        {
            
        }
    }

public void errorMessage(String message,String errorName)
    {
        JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE); 
    }
    
    public void informationMessage(String message,String informationName)
    {
        JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE);
    }


vote_ok
von HR_SS (330 Punkte) - 25.12.2019 um 12:05 Uhr
Quellcode ausblenden Java-Code
/**
 * Berechnung des Faktors zur Fakultät von n! = 120
 * Ermittelt wird der Wert n.
 * 
 * Hinweis:
 * Für n! = 33 wird bsp. keine Lösung gefunden, da nur ganzzahlige n geprüft werden, daher 
 * wurde das Programm um eine numerische Berechnung (Stirlingformel) erweitert!
 * 
 * Mit der Schrittweite kann die Genauigkeit verbessert werden!
 * 
 * @author HR_SS
 *
 */
public class RekursivFakultaet {
	public static void main(String[] args) {
		double n = 120;
		
		for(int i = 0;  i <= n; i++) {
			int x = rekursivFakultaet(i); 
			if(x == n) {
				System.out.println("Faktor zur Fakultät n! = " + n + " ist: " + i);
				System.out.println("--------------------");
				return;
			}
		}
		System.out.println("Es wurde kein ganzzahliger Faktor gefunden...");
		
		System.out.println("Starte numerische Berechnung...");
		double schrittweite = 0.001;
		double start = 0;
		while(true) {
			double naeherung = Math.sqrt(2*start*Math.PI)*Math.pow((start/Math.E), start);
			if(naeherung >= n) {
				System.out.println("Faktor zur Fakultät n! = " + n + " ist: " + start);	
				System.out.println("--------------------");
				return;
			}
			//System.out.println(start);
			start = start + schrittweite;
		}
	}

	private static int rekursivFakultaet(int n) {	
		if(n > 1) {
			return n * rekursivFakultaet(n-1);
		}else {
			return 1;
		}
	}
}
/*

Bei Eingabe n = 120

Ausgabe:
Faktor zur Fakultät n! = 120.0 ist: 5
--------------------


Bei Eingabe n = 33

Ausgabe:
Es wurde kein ganzzahliger Faktor gefunden...
Starte numerische Berechnung mit Schrittweite: 0.001
Faktor zur Fakultät n! = 33.0 ist: 4.220999999999744
--------------------


 */
1801014

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.