Rekursive Multiplikation

Hallo Matthias,

mein Ansatz wäre folgendermassen gewessen.

//Rekursive Berechnung der Fakultät
import ConsoleInOut.*;
class Fakultaet
{
static int Fak(int a, int b, int c) //Annahme: n > 0
{
if (b < 2)
return 1; //Ende, wenn n < 2 ist
else
return c = a + a*(b-1); //Rekursiver Aufruf

}
public static void main (String args[])
{
System.out.println();
System.out.println("Wert der ersten Zahl ein: ");
int a = Console.console_in_int();
System.out.println("Wert der zweiten Zahl ein: ");
int b = Console.console_in_int();
if (a > 0 && b > 0)
{
int c = 0;
int Fak = Fak(a,b,c);
System.out.println("Ergebnis :" + Fak);
}
}
}

Irgendwie funktioniert es nicht.
 
Hallo,

warum nennst du deine Klasse denn „Fakultaet“? Du willst doch ein Produkt ausrechnen. Genauso die Methode „Fak“. Wozu soll der dritte Parameter „c“ dienen? Schlussendlich hast du keinen Aufruf von „Fak“ innerhalb von „Fak“, die Rekursion fehlt also komplett.

Grüße,
Matthias
 
Hallo Matthias,

1.) das mit dem Namen ist rein zufällig, könnte auch anders heissen?

2.) c wollte ich als Rückgabeparameter, aber ich denke jetzt der ist überflüssig?

3.) ich weiss nicht wie ich die Rekursion mit zwei Parameter genau hinbekomme?

Im Prinzip müßte es so verlaufen. Das ein Faktor mit sich selber addiert wird. und gleichzeitig der zweite Faktor um 1 abnimmt?

Im zweiten Durchlauf wird das Ergebnis des 1 Runde wieder per addition um den Wert des 1 Faktors erhöht und der zweite Faktor wieder um 1 abnimmt.

Diese Prozedur sollte sich solange wiederholen bis der zweite Faktor gleich dem Wert 1
ist und somit die Ausstiegsbeingeung erreicht ist?

Bloß wie setze ich den Vorgang in Java um?

Viele Grüße, Michael
 
Ähm... da oben steht der Code für die Zerlegung einer Fakultät in Multiplikationen. Ist es jetzt so schwer daraus Code für die Zerlegung einer Multiplikation in Additionen zu machen? Das einzige was du machen muss, ist die Operatoren ändern und die korrekte Abbruchbedingung finden.

Gruß
Ollie
 
Hallo,
Ich habe erreicht das die Funktion einmal durchlaufen wird nur sie endet nach dem ersten mal?

import ConsoleInOut.*;

public class multi1
{
public static void main (String[] args)
{
System.out.println("Bitte Geben Sie den ersten Zahlenwert ein ");
int n = Console.console_in_int();
System.out.println("Bitte Geben Sie den zweiten Zahlenwert ein ");
int m = Console.console_in_int();

System.out.println("Wert = " + multi(n,m));
}
private static int multi(int n, int m)
{
if((m==0 || m==1))
{
return 1;
}
else
{
return n + n ;
}
}
}

Viele Grüße, Michael
 
Kann meinen Beitrag von vorhin nicht sehen. Daher nochmals ein Lösungsansatz.
PHP:
public class RekMul
{

	static int mul(int faktor1, int faktor2){
		// DEBUG
		System.out.println("a * b : "+faktor1+" "+faktor2);
		//DEBUG
		if (faktor2 == 1)
			return faktor1;
		else{
			return mul(faktor1, faktor2-1) + faktor1;
		}
	}

	public static void main(String[] args){
		System.out.println("Resultat 4*6 rekursiv = "+RekMul.mul(4, 6));
		System.out.println("Resultat 13*3 rekursiv = "+RekMul.mul(13, 3));
	}
};

Hoffe das hilft.
Gruss
 
Zurück