@Klagenderlamer sagte in Iteration in Rekursion:
/*
Familie Müller ist zu einer Geburtstagfeier eingeladen. Leider können sich die Familienmitglieder (Anton, Berta, Claus und Doris nicht einigen, wer hingeht und wer nicht. In einer gemeinsamen Diskussion kann man sich jedoch auf die folgenden Grundsätze verständigen.
1. Mindesten ein Familienmitglied geht zur Feier.
2. Anton geht auf keinen Fall zusammen mit Doris.
3. Wenn Berta geht, dann geht Claus mit.
4. Wenn Anton und Claus gehen, dann bleibt Berta zu Hause.
5. Wenn Anton zu Hause bleibt, dann geht entweder Doris oder Claus.
Helfen Sie Familie Müller, indem Sie ein Programm erstellen, das alle Gruppierungen ermittelt, in denen Familie Müller zur Feier gehen kann.
*/
familiemueller(int Anton, int Berta, int Claus, int Doris)
{
if ( Anton==1&&Claus==1) if (Berta==1) return;
if ( Anton==1 || Berta ==1 || Claus==1 || Doris==1 )
if ( !(Anton==1 && Doris ==1) )
if( (Berta==1&&Claus==1) || (Berta==0 && Claus==0 ) || (Berta==0 && Claus==1) )
if ( ( Anton==0 && (Doris==1|| Claus==1 ) ) || Anton==1)
{
printf("\nMoeglich:\n");
printf("Anton geht");
if ( Anton==1 ); else printf(" nicht");
printf(".\n");
printf("Berta geht");
if ( Berta==1 ); else printf(" nicht");
printf(".\n");
printf("Claus geht");
if ( Claus==1 ); else printf(" nicht");
printf(".\n");
printf("Doris geht");
if ( Doris==1 ); else printf(" nicht");
printf(".\n");
}
}
int main(void)
{
int a=0;
while ( a < 16 )
{
familiemueller( (a>>3)&1, (a>>2)&1, (a>>1)&1, a&1);
a++;
}
}
Habe da noch ein anderes mit einem Lexer, einem Parser, einem Haufen Zufallsversuchen und "größer als", "kleiner als", "ist gleich"-Vergleichen. Was heißt da Rekursion? Das Programm müßte einfach alle Wertekombinationen durchiterieren und auf Stimmigkeit prüfen, bis kein Widerspruch mehr auftritt. Das kann man iterativ, rekursiv oder einfach sehr sicher dadurch machen, daß man den Zufallsgenerator lange genug ackern läßt?!
Ich nehme mal an, das das Pseudocode sein soll, denn weder kompiliert das, noch ist das C++, noch funktioniert das wie gewünscht. Abgesehen davon, dass ich es anders gelöst hätte, ist z.B. sowas hier:
familiemueller( (a>>3)&1, (a>>2)&1, (a>>1)&1, a&1);
furchtbar unintuitiv. Ziel von Quellcode sollte unter anderem auch sein, dass man auf einen Blick erkennt was er tut.