Zahlenarrays rekursiv vergleichen



  • Hi,

    bin noch nicht sehr lange am programmieren in C (bisher nur PHP) und versuche
    mich gerade an ein paar Übungsaufgaben. Momentan hänge ich bei dem rekursiven
    Vergleich von 2 gleichgroßen Zahlenarrays (t und g), deren Größe (n) der
    Funktion mit übergeben wird. Gezählt werden soll die Anzahl der identischen
    Zahlen in beiden Arrays (z). Allerdings bekomme ich die Abbruchbedingung nicht
    auf die Reihe. n kann ich beim Rekursionsaufruf nicht verringern, da ich sonst
    das zweite Array nicht mehr komplett prüfen kann. Sonst wäre die
    Abbruchbedingung n==0. Momentan verringere ich das Array t jeweils um ein
    Element. Wie kann ich allerdings abfragen, ob ich das Array komplett durchlaufen
    habe?! Vielleicht bin ich ja auch komplett auf dem falschen Weg...

    Bin für jede Hilfe dankbar 😉

    int lotto(int n, int t[], int g[], int z)
    {
    int i;

    if (???)
    {
    z=0;
    }
    else
    {
    for (i=0; i<=n-1; i++)
    {
    if (t[n-1]==g[i])
    z=z+1;
    }

    lotto(n,t-1,g,z);
    }

    return z;
    }



  • du hast grundlegende probleme beim verständnis von c arrays.

    erstmal sind arrays statisch. wenn du mit arrays arbeitest, hast du meistens einen zeiger in der hand, weil sich arrays bei jeder gelegenheit in zeiger verwandeln.

    du suchst also nach der schnittmenge (also anzahl gleicher elemente) in beiden arrays?

    dann machst du sowas:

    /* n ist die laenge, t und g sind die arrays */
    int lotto(int n, int *t, int *g)
    {
    	int count = 0;
    	int i, j;
    	for(i = 0; i < n; ++i)
    	{
    		for(j = 0; j < n; ++j)
    		{
    			if (t[i] == g[j])
    				++count;
    		}
    	}
    	return count;
    }
    


  • Danke, aber die iterative Lösung ist sogar für mich kein Prob gewesen.
    Leider muss ich das ganze in einer rekursiven Form darstellen, was zwar
    für diese Aufgabe sicherlich wenig sinn macht, aber angeblich irgendwie
    funktionieren muss. Problem dabei ist für mich irgendwie die Abbruch-
    bedingung... (siehe oben)



  • Dann teil das Problem doch auf:

    int lotto_helper(int anz, int t[], int g[], int start_idx, int zaehler);
    
    int lotto(int anz, int t[], int g[]) {
        return lotto_helper(anz, t, g, 0, 0);
    }
    

Anmelden zum Antworten