Primzahl rekursiv mit einem Wert ohne i, wie?

Bitte aktiviere JavaScript!
Ich versuche Primzahlen rekursiv ohne den zusätzlichen Teiler i zu verwenden, wie mache ich das?
Also so dass ich nicht Primzahlen(n,2) eingeben muss, sondern nur Primzahlen(n) aufrufe.

Java:
public static int Primzahlen(int n, int i)
   {
       
       if(n%i !=0 || n==i)
       {
           if(i<n)
           {
               
               return Primzahlen(n,++i);
           }
           System.out.print("eine Primzahl ist: ");
           return n;
       }
       else
       {
           System.out.print("keine Primzahl ist: ");
           
           
       }
       return n;
   }
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Die rekursive Methode muss immer einen Akkumulator-Parameter haben. Du kannst aber natürlich die rekursive Methode durch eine andere Methode kapseln:
Java:
public class Primzahl {
  private static boolean istPrimzahl(int n, int i) {
    return i >= n || n % i != 0 && istPrimzahl(n, i + 1);
  }
  public static boolean istPrimzahl(int n) {
    return istPrimzahl(n, 2);
  }
  public static void main(String[] args) {
    System.out.println(istPrimzahl(6));
  }
}
Plus: Ich habe mal deinen Code etwas vereinfacht und die unmöglichen System.out.println()s rausgenommen.
 
Danke, ich vermute mal du meinst mit einem Akkumulator Parameter einen Parameter der rauf bzw. runterzählt oder? also hier das i
 
Dein Zitat:
"Die rekursive Methode muss immer einen Akkumulator-Parameter haben."

Das bezieht sich nur auf diese rekursive Methode nicht auf alle oder?
 
Zitat:
Du kannst aber natürlich die rekursive Methode durch eine andere Methode kapseln:

Damit meinst du sowas oder?
public static int Primzahl(int n)
{
return Primzahlen(n,2); // Diese funktion wird dann aufgerufen (also die obige)
}
 
Dein Zitat:
"Die rekursive Methode muss immer einen Akkumulator-Parameter haben."

Das bezieht sich nur auf diese rekursive Methode nicht auf alle oder?
Ja, genau. Die rekursive Methode in diesem Fall.

Zitat:
Du kannst aber natürlich die rekursive Methode durch eine andere Methode kapseln:

Damit meinst du sowas oder?
public static int Primzahl(int n)
{
return Primzahlen(n,2); // Diese funktion wird dann aufgerufen (also die obige)
}
Ja, wie ichs ja im Code gezeigt habe. Allerdings solltest du dir mal Gedanken darüber machen, was deine Methode eigentlich bestimmen soll und was sie genau als Rückgabewert hat. Dass die Methode auf stdout ausgibt, dass eine Zahl eine Primzahl ist oder nicht, ist wirklich nicht hilfreich, wenn du die Methode in jedem beliebigen Kontext einsetzen willst.

Stell dir mal vor, dass eine andere Methode ermitteln möchte, ob eine Zahl eine Primzahl ist, und eventuell basierend auf dieser Information etwas tun will. Hierzu ist deine Methode gänzlich ungeeignet.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben