Rekursive Funktion zum multiplizieren
-
hi,
hab hier eine übungsaufgabe vorliegen wo ich eine rekursive funktion schreiben soll, die mir alle int-zahlen eines arrays aufmultipliziert, ist mir auch soweit gelungen.
Aber es hat noch einen schönheitsfehler, wenn ich die funktion aufrufe, muss ich die arraygröße -1 angeben, ansonsten funktioniert es nicht richig.
hier mal der code
// rekursion.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <conio.h> int produkt(int *a, int n) { if (n == 0) return a[n]; return produkt(a, n-1)*a[n]; } int _tmain(int argc, _TCHAR* argv[]) { int a[] = { 3, 2, 4}; printf("Produkt: %i", produkt(a, 3-1)); getchar(); return 0; }
Ruf ich die Methode so auf
produkt(a, 3)
greife ich ins nirvana bei einem 3 stelligen array.
jetzt meine frage, was muss ich machen, damit ich meine funktion mit
produkt(a, 3)
aufrufen kann, sie immernoch rekursiv arbeitet, aber dennoch das richtige ergebnis bringt.
ich habs nicht hinbekommen, geht das überhaupt? wäre nett wenn mir hier jemand einen tipp geben könnte.
-
rek0815 schrieb:
int produkt(int *a, int n) { if (n == 1) return a[0]; return produkt(a, n-1)*a[n-1]; }
-
Anstatt conio.h solltest du wohl eher stdio.h einbinden.
-
OhneName schrieb:
rek0815 schrieb:
int produkt(int *a, int n) { if (n == 1) return a[0]; return produkt(a, n-1)*a[n-1]; }
funktioniert nicht, hatte ich auch schon. mit dem array (3,2,4) müsste da 3*2 = 6 *4 = 24 rauskommen.
es kommt aber 72 raus. das entspricht einer multiplikation von 3*3=9 (wenn n=0 erreicht wird) 9*2*4 = 72.
conio.h hab ich nur wegen dem getch() drin, damit die konsole offen bleibt.
-
#include <stdio.h> int produkt(int *a, int n) { if (n == 1) return a[0]; return produkt(a, n-1)*a[n-1]; } int main(int argc, char* argv[]) { int a[] = { 3, 2, 4}; printf("Produkt: %i", produkt(a, 3)); return 0; }
Da kommt bei mir 24 raus, du musst noch irgendwas falsch machen.
-
int produkt(int *a, int n) { if (n == 0) return 1; return produkt(a, n-1)*a[n-1]; }
-
ah, ok. danke.
jetzt hab ich es, mein fehler.
ganz schon tricky diese rekursionen