Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Programm schreiben » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Programm schreiben
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Björn
unregistriert
Programm schreiben Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo :-)

Geschrieben werden soll ein Program, das in einem Array die Anzahl der 11en zählt. Das Programm soll iterativ und rekursiv geschrieben werden.

Iterativ war kein Problem, sieht folgendermaßen aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

public class 11enZählen
{
    public static void main(String[] args) 
    {
        int [] array = {11,11,11,12,3,4}; 
        int index = 0; 
        zahl(array, index );
    }   

    public static void zahl(int [] nums, int index)
    {
        for (int i=0; i<nums.length;i++)
        {
            if (nums[i]==11)
            {
                ++index; 
            }
        }
        System.out.println(index);
    }
}


Leider hänge ich bei rekursiv fest (ich weiß nicht, warum mir rekursiv immer so schwer fällt)

Dennoch habe ich einen Ansatz gewagt, welcher aber nicht funktioniert:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
package javarecursiv; 

public class JavaRecursiv
{
    public static void main(String[] args) 
    {
        int index = 0; 
        int [] array = {11,11,11,12,3,4}; 
        zahl(array, index );
    }   

    public static void zahl(int [] nums, int index)
    {
        int hv = 0; // hv = Hilfsvariable
        int laengenums = nums.length; 
        if (laengenums>0)
        {
            if (nums[hv]==11)
            {
                ++index; 
            }
            return zahl(); // HIER WEIß ICH NICHT MEHR WEITER! 
        }
    }
}


Meine Ideen:
Vielen Dank für Eure Hilfe.
14.05.2015 10:31
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

public class 11enZählen
eclipse lässt mich die Klasse nicht einmal erstellen, Ziffern haben an erster Stelle nichts verloren.

Die iterative Methode gefällt mir nicht, warum übergibst du da eine Variable index?
Ich würde das so machen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public static void main(String[] args) {
	int[] array = { 11, 11, 11, 12, 3, 4 };
	int index = 0;
	System.out.println(zahl(array));
}

public static int zahl(int[] nums) {
	int result = 0;
	for (int i = 0; i < nums.length; i++) {
		if (nums[i] == 11) {
			result++;
		}
	}
	return result;
}


Bei der rekursiven Methode brauchst du den index dann:
code:
1:
2:
3:
4:
5:
public static int zahl(int[] nums, int index) {
	if (index >= nums.length) // Abbruchbedingung
		return 0;
	return zahl(nums, index + 1) + (nums[index] == 11 ? 1 : 0);
}


__________________
Syntax Highlighting fürs Board (Link)
14.05.2015 10:56 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Björn
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
return zahl(nums, index + 1)



Super, danke. Das kann ich nachvollziehen bis auf nums ? Fehlt da nicht der Array-Index?
14.05.2015 11:20
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nö, es wird das komplette Array übergeben und zusätzlich der index der nächsten Zahl.

__________________
Syntax Highlighting fürs Board (Link)
14.05.2015 11:22 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Björn
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Tausend Dank für deine Hilfe, so langsam wird das mit der Rekursion klar.

Eine Aufgabe habe ich noch, wo auch noch iwo ein Denkfehler dabei ist.

Wir haben Hasen, welche in einer Linie stehen. Die ungeraden Hasen ( 1, 3, .. ) haben die normalen 2 Ohren. Die geraden Hasen ( 2, 4, ..) haben 3 Ohren. Ausgegeben werden soll die Anzahl der Ohren:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

package javarekursivtest;

public class JavaRekursivTest {

    public static void main(String[] args) 
    {
        
        int anzahl = 10; 
        System.out.println(bunnyEars2(anzahl));
    }
    
    public static int bunnyEars2(int bunnies)
    {
        if (bunnies<=0)
        {
            return 0; 
        }
        return (bunnies%2==0?3:2 + bunnyEars2(bunnies-1));
    }
}




Mein Fehler muss meiner Meinung nach irgendwo bei der Addition der Ohren liegen?


Vielen Dank für die Hilfe :-)
15.05.2015 01:18
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Da fehlt eine Klammer:
code:
1:
return ((bunnies % 2 == 0 ? 3 : 2) + bunnyEars2(bunnies - 1));


__________________
Syntax Highlighting fürs Board (Link)
15.05.2015 06:26 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Björn
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Super, danke dir für die Antwort, jetzt läuft das Programm smile
15.05.2015 15:52
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Programm schreiben