Rekursion Hilfe...



  • Es soll eine Funktion teilEl(t,a1,…,an) für n³0 und t,ai Î N realisiert werden,
    die ermittelt, wie viele Elemente ai ohne Rest durch t teilbar sind (z.B.
    teilEl(5,8,5,1,10,7,20) ist 3).

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    int teilEl(int vektor[100], int anzahl)
    {
    	int Gefunden = 0;
    
    	if ( anzahl == 0 )
    	{
    		return Gefunden;
    	}
    
    	else 
    
    	if ( teilEl(vektor, anzahl-1)%2 == 0 )
    	{
    		Gefunden++;
    		return teilEl(vektor, anzahl-1);
    	}
    
    	else 
    	{
    		return teilEl(vektor, anzahl-1);
    	}
    }
    
    int main()
    {
    	int vektor[100], anzahl, iNr;
    
    	printf("Geben Sie die Anzahl ein: \n");
    	scanf("%i", &anzahl);
    
    	for (iNr = 0; iNr<=anzahl-1; iNr++)
    	{
    		printf("Wert %i\n", iNr+1);
    		scanf("%i", &vektor[iNr]);
    	}
    
    	printf("%i Zahlen konnten durch 2 ohne Rest geteilt werden\n", teilEl(vektor[100], anzahl));
    	system("Pause");
    }
    

    Ich fange gerade erst an mit Rekursion. Was habe ich hier falsch gemacht?



  • Hallo,

    sei mir nicht böse, aber die Frage "Was ist richtig?" wäre kürzer zu beantworten gewesen: Nichts.

    Warum willst Du eine ganz normale Liste, die Du linear durchgehen willst, mit einer Rekursion durchgehen?

    Außerdem sollte der Compiler dir schon mindestens einen Fehler gemeldet haben:

    Gefunden is assigned a value that is never used.

    Wenn Du Glück hast, zweigt er Dir auch noch die Zeile 20 an. Dort incrementierst Du den Wert von gefunden und kehrst Dann sofort zum Aufrufer zurück ohne was damit zu machen.

    BTW.: Wenn Du einen böswilligen Benutzer Deiner Anwendung hast, der 1000 Werte eintragen will, crasht Dein Programm.

    mfg Martin



  • mgaeckler schrieb:

    Hallo,

    sei mir nicht böse, aber die Frage "Was ist richtig?" wäre kürzer zu beantworten gewesen: Nichts.

    Ich will ja mal nicht so sein und nehme an, daß Du die Rekursion nur zum Üben benutzt hast. Hier mal mein Vorschlag (Tippfehler bitte selber korigieren):

    int teiler( const int *vector, int count )
    {
        int Gefunden=0;
    
        count--;
        if( count )
        {
            Gefunden = teiler( vector, count );
            if( vecor[count]%2 == 0 )
                Gefunden++;
        }
        return Gefunden;
    }
    

    Den Fehler in main, darfst Du selbst suchen, finden und beheben.

    Hoffe das hilft

    mfg Martin


Anmelden zum Antworten