Schreiben Sie eine Klasse Berechne mit der Methode int f(int k), die für k > 1 folgende Funktion f berechnet:
• f(1) = 0.
• Wenn k gerade, dann f(k) = f(k/2) + 1.
• Wenn k ungerade, dann f(k) = f(3k−1) + 1
Meine Frage ist nur, da ich hier bei manchen Zahlen einen Stack Overflow bekomme, ob meine Implementierung richtig ist oder ob ich was falsch gemacht habe. Weiß für diese Angabe nämlich leider keine andere Lösung.
• f(1) = 0.
• Wenn k gerade, dann f(k) = f(k/2) + 1.
• Wenn k ungerade, dann f(k) = f(3k−1) + 1
Java:
public class Berechne
{
public Berechne()
{}
int f(int k)
{
if(k == 1)
{
return 0;
}
if(k%2 == 0)
{
System.out.println(k);
return f(k/2)+1;
} else {
System.out.println(k);
return f(3*k-1)+1;
}
}
}
Meine Frage ist nur, da ich hier bei manchen Zahlen einen Stack Overflow bekomme, ob meine Implementierung richtig ist oder ob ich was falsch gemacht habe. Weiß für diese Angabe nämlich leider keine andere Lösung.