Rrekursion Multiplikation in C?

 - (Computer, Schule, Programmieren)  - (Computer, Schule, Programmieren)

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Machen wir und folgendes klar:

a*b=b+(a-1)*b=a+(b-1)*a

Du hast also zwei Rekursionen zur Auswahl.

Ferner gilt, wenn a==0 || b==0 Ergebnis = 0

Abbruchbedingung (für die erste Variante: Wenn a=1 Rückgabe b.

------

Damit solltest Du eigentlich auskommen.

Und wenn b=1? Warum wird das nicht berücksichtigt

0
@lkeyz

Du kannst das natürlich ganz allgemein am Anfang der Rekursion prüfen, wenn einer der beiden=1 gibt den jeweils anderen Wert zurück. Das ist letztlich nur eine Optimierung.

Du kannst Dich auch explizit dafür entscheiden, die Rekursion über den kleineren der beiden Werte zu machen, das wäre vermutlich optimal, dann ergibt sich das von selbst.

0

Dank der Ackermann-Formel bekommt man so ziemlich jede additiven Grundfunktionen per Rekursion hin. Im Prinzip kannst Du die Addition mit hineinnehmen.

Addition (mal so eine Idee von mir, nicht getestet, kann auch falsch sein):

int addiere (int a, int b){
   if (0==a && 0 == b) return 0;
   if (0 == a) return 1+addiere(0,b-1);
   if (0 == b) return 1+addiere(a-1,0):
   return 1 + addiere(a-1,b); 
  // man hätte auch return 2+addiere(a-1,b-1), 
  // aber 2+ ist ja nicht erlaubt
}

Und jetzt genau dieselbe Ide für die Multiplikation

int multi(int a, int b) {
     if (0 == b) return 0;
     return addiere(a,multi(a,b-1));
}

Ich hoffe, das funzt. Im Herbst fange ich mit Informatik an ...

Anspruchsvoll ist jetzt, addiere in multi zu integrieren. Bekommst Du das hin?

Statt return addiere(a,multi(a,b-1)); geht natürlich auch return a+multi(a,b-1); widerspricht aber Deinen Vorgaben.

0

Ich habe a1 und a2 aus Versehen beim addieren geschrieben, damit meinte ich a und b.

C-Programmierung Aufgabe

Hallo =) ich programmier gerade einen Zinseszinsrechner in C. Hierbei habe ich bisher folgendes Programm:

float CalcFloatInterest(float amount, float intInPercent, int days); double CalcDoubleInterest(double amount, double intInPercent, int days);

int main(void) { float amount = 0; float intInPercent = 0; int days = 0;

printf("Bitte Betrag eingeben: ") ; scanf("%f", &amount); printf("Bitte Zinssatz in %% eingeben: ") ; scanf("%f", &intInPercent); printf("Laufzeit in Tagen eingeben: ") ; scanf("%d", &days); printf("Die Zinsen mit float bei %d Tagen betragen: %.2f", days, CalcFloatInterest(amount, intInPercent, days) - amount); printf("\nDie Zinsen mit double bei %d Tagen betragen: %.2f", days, CalcDoubleInterest(amount, intInPercent, days) - amount);

return 0;

}

float CalcFloatInterest(float amount, float intInPercent, int days){

float interest = intInPercent / 100; int n;

for(n = 1; n <= days; n++){

amount = amount * ( 1+ (interest / 365));

    }

return amount;

}

double CalcDoubleInterest( double amount, double intInPercent, int days){

double interest = intInPercent / 100; int n;

for(n = 1; n <= days; n++){

amount = amount * ( 1+ (interest / 365));

    }

return amount;

}

Nun ist die nächte AUfgabe folgende:

Implementieren Sie die Funktion CalcSpan(). Sie berechnet die Laufzeit eines Darlehens, bei gegebenem Zinssatz,Betrag und monatlicher Rate.

Als Vereinfachung gehen wir davon aus, dass Monate genau 30 Tage lang sind: alle 30 Tage wird die Rate vom Darlehen

abgezogen. Die erste Rate wird dabei sofort zu Beginn fällig. Für die Zinseszins-Berechnung gilt das gleiche wie bei Teilaufgabe 1: der Zins wird täglich bezogen auf den aktuellen Betrag berechnet. Geben Sie die Zeitspanne inTagen zurück. Das Darlehen gilt als abbezahlt, wenn der Betrag mit der monatlichen Rate Null oder negativ wird. Begrenzen Sie Ihre Funktion auf eine maximale Laufzeit von 10 Jahren, d.h. benötigt ein Darlehen mehr als

3650 Tage zum Zurückzahlen, dann bricht die Funktion ab und gibt -1 zurück.

Verwenden Sie folgenden Prototypen:

int CalcSpan(double amount,double intInPercent,double monthlyRate);

Fügen Sie am Ende Ihre

r main()-Funktion eine Eingabeaufforderung mitscanf() ein, um die monatliche Rate einzulesen.Geben Sie im Anschluss die mit CalcSpan() berechnete Laufzeit in Jahren und Tagen, z.B. 8 Jahre, 20 Tage, aus. Übersetzen und Testen Sie Ihr Programm. Geben Sie das funktionstüchtige Programm ab. Die Ausgabe könnte nun wie folgt aussehen:

Bitte Betrag eingeben:1000 Bitte Zinssatz in % eingeben: 5.41 Laufzeit in Tagen eingeben: 365 Die Zinsen mit float bei 365 Tagen betragen: 55.59 Die Zinsen mit double bei 365 Tagen betragen: 55.59 Bitte die monatliche Rate eingeben:247 Die Laufzeit beträgt: 0

Hierzu fehlt mir leider jeglicher Ansatz :/ Kann vllt jemand helfen?

...zur Frage

Was möchtest Du wissen?