Array in Rekursion

drpingoo

Erfahrenes Mitglied
Hallo zusammen,

Ich hab da ne Frage. Ist es möglich die Inhalte eines Arrays, das ein Übergabeparameter ist und dessen Funktion rekursiv aufgerufen werden soll, um eine Adresse weiter nach oben bzw nach unten zu verschieben?

lg
 
was hast du genau vor? Hört sich irgendwie nach ner Referenz eines Zeigers (o. eiger auf Zeiger) an, was du da machen willst, aber kann deiner Schilderung nicht ganu folgen, sorry.
 
Ja fallfs du noch Platz im Array hast nach oben und unten ansonsten nein oder viel spass beim zerschießen deines Arbeitsspeichers.
 
Es geht darum ein Puzzle, wenn man das so nennen kann, rekursiv zu programmieren. Das erste Element des übergebenen Arrays ist die jeweilig Summe die erreicht werden soll. Falls dies möglich ist, sollte true oder so was ähnliches zurückgegeben werden, ansonsten false. Also beispielsweise ./puzzle 34 1 2 3 4
34=1+2+3+4(überprüfen)
34=12+3+4
34=12+34 etc.

Und was ich machen wollte war folgendes: summe(int sum, int liste[], int länge)
Und ich wollte es so rekursiv verändern (es gibt noch einen Schritt, aber zunächst den), dass liste[1]*10+liste[2] den ersten Platz der liste[] belegt, das Element an liste[2] gelöscht/überschrieben wird, und die länge um 1 gekürzt wird. Also ich würde gerne den Rest des Arrays um eine Stelle raufschieben. Geht das überhaupt?
 
Hallo,

ich bin mir nicht sicher ob ich dich richtig verstanden habe. Das hört sich an als wolltest du einfach nur ein Element eifügen statt draufzupacken. Wenn das so ist, allociere dir ein neues Array von der Größe des alten bzw. Größe -1. Schreibe das erste Element rein und kopiere den Rest aus dem anderen Array per Memorymethoden (memcpy, memmove etc. ) da rein.

Grüße
R.
 
Hi.
Es geht darum ein Puzzle, wenn man das so nennen kann, rekursiv zu programmieren. Das erste Element des übergebenen Arrays ist die jeweilig Summe die erreicht werden soll. Falls dies möglich ist, sollte true oder so was ähnliches zurückgegeben werden, ansonsten false. Also beispielsweise ./puzzle 34 1 2 3 4
34=1+2+3+4(überprüfen)
34=12+3+4
34=12+34 etc.

Und was ich machen wollte war folgendes: summe(int sum, int liste[], int länge)
Und ich wollte es so rekursiv verändern (es gibt noch einen Schritt, aber zunächst den), dass liste[1]*10+liste[2] den ersten Platz der liste[] belegt, das Element an liste[2] gelöscht/überschrieben wird, und die länge um 1 gekürzt wird. Also ich würde gerne den Rest des Arrays um eine Stelle raufschieben. Geht das überhaupt?
Falls ich dich richtig verstanden habe, könntest du das z.B. so machen:
C:
int summe(int sum, int liste[], int laenge) {
  if (laenge > 1) {
    // Berechnung durchführen... 
    ...
    liste[1] = liste[0]*10 + liste[1]; // das erste Element hat Index 0!
    summe(sum, liste + 1, laenge - 1);
  } else {
     return ...
  }
}
Gruß
 
Ich glaube, deepthroat denkt in die richtige Richtung. Das erste Element in der Liste ist eben die Summe, die erreicht werden sollte. Die sollte eigtl gleich bleiben. Deswegen habe ich das geschrieben:
liste[1]*10+liste[2] ]

Aber ich glaube, es besteht auch noch folgendes Problem.
Sagen wir, wir haetten diese Eingangssequenz: 14 2 3 5.
14 ist also die Summe, die erreicht werden muss. Im ersten Fall versuche ich 14=2+3+5. Das schlaegt fehl. Also weiter. 14=23+5. Und ich glaube eben genau hier liegt noch ein Problem. Die 3 sollte durch die 5 ersetzt und das Array um eine Einheit gekuerzt werden. Wie kriege ich die weg?

lg
 
Zuletzt bearbeitet:
Ich glaube, deepthroat denkt in die richtige Richtung. Das erste Element in der Liste ist eben die Summe, die erreicht werden sollte. Die sollte eigtl gleich bleiben.
Wozu dann der erste Parameter bei der Funktion?
Aber ich glaube, es besteht auch noch folgendes Problem.
Sagen wir, wir haetten diese Eingangssequenz: 14 2 3 5.
14 ist also die Summe, die erreicht werden muss. Im ersten Fall versuche ich 14=2+3+5. Das schlaegt fehl. Also weiter. 14=23+5. Und ich glaube eben genau hier liegt noch ein Problem. Die 3 sollte durch die 5 ersetzt und das Array um eine Einheit gekuerzt werden. Wie kriege ich die weg?
Indem du einfach die Länge um eins dekrementierst.

Irgendwie ist mir aber auch noch nicht klar, was du da überhaupt machen willst. Kannst du das mal richtig erkären? Wie sind bei diesem Puzzle die Regeln?

Gruß
 
Ja stimmt, der erste Parameter erübrigt sich eigtl, da man ihn auch durch liste[0] ausdrücken kann.

Ok, ich versuchs nochmal zu erklären. Es ist eigtl kein Puzzle, die Aufgabe heisst einfach so. Das Programm erhält eine Eingangsseqenz, deren vorderstes Element die Zahl ist, die aus Kombinationen der restlichen Elemente zusammengesetzt werden sollte. Man kann alle Zahlen einzeln addieren oder sie auch zusammennehmen.

/puzzle 34 1 2 3 4
34=1+2+3+4(überprüfen)
34=12+3+4
34=12+34 etc.

Wichtig ist, dass die Zahlen nicht vertauscht werden dürfen, die Reihenfolge muss gleich bleiben. Lediglich die + ändern sich bzw ihre Position, wenn man so will. Verstehst du die Aufgabenstellung so?

lg
 
Einen wunderschönen guten Tag,

wenn ich das richtig verstanden habe, hast du ein Array mit Zahlen. Die erste Zahl ist gewünschte Summe. Alle weiteren Zahlen stellen Ziffern möglicher Summanden dar. Um dein Beispiel aufzugreifen:

  • Das Programm erhält die Zahlenfolge: 34 1 2 3 4
  • Die gewünschte Summe ist: 34
  • Diese soll aus Zahlen mit den Ziffern 1, 2, 3 und 4 gebildet werden, wobei diese Reinfolge eingehalten werden muss und keine Zahl doppelt vorkommen darf.
  • Möglich Summanden sind somit: 1, 2, 3, 4, 12, 23, 34, 123, 234 und 1234
  • Das Programm überprüft rekursiv, ob die Summe mit den möglichen Summanden gebildet werden kann, also:
    • 34 == 1 + 2 + 3 + 4
    • 34 == 1 + 2 + 34
    • 34 == 1 + 23 + 4
    • 34 == 1 + 234
    • 34 == 12 + 3 + 4
    • 34 == 12 + 34
    • 34 == 123 + 4
    • 34 == 1234

Ist das so korrekt?

Gruss
Mizi
 
Zuletzt bearbeitet:
Zurück