Rekursion C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rekursion C++

    Ich soll ne rekursiv definierte Problemstellung programmieren. Es geht um folgendes :

    Eine Haltestelle wird zum Zeitpunkt X das erste mal und zum Zeitpunkt Y das letzte mal.

    Wenn nach n Minuten ein Bus hält, hält auch einer nach n+12 und einer nach 2n+5 Minuten.
    Nun soll das Programm angeben, ob zu einem Zeitpunkt Z ein Bus hält.


    Eingegeben werden X, Y und Z. Anweisung : Uhrzeiten ohne Doppelpunkt eingeben also aus 13:15 wird 1315

    Meine herangehensweise bisher:

    Zuerst berechne ich die Differenz von Z zu X :
    z.B

    X = 800 und Z = 1400

    Z - X = 600

    und dann auf minuten n = 600/100 * 60

    Soooo

    Wenn nun bei den Minuten rest 0 rauskommt bei mod10, dann kann ich ja gleich ausspucken "ja es fährt ein bus"

    Sollte das nicht der Fall sein, kommt ne rekursive Funktion ins Spiel :

    Um zu berechen ob nach n minuten ein bus fährt, muss ich schauen ob nach n-12 und nach (n-5)*1/2 minuten ein Bus fährt.
    um zu schauen ob da ein bus fährt muss ich gucken ob nach (n-24) oder nach ((n-5)*1/2)-5)*1/2 minuten ein Bus fährt usw.

    Und da is mein Problem ! Wie packe ich das in ne rekursive Funktion ?

    funktion(n)

    if(n<=0)
    return 0;

    else
    n_eins = funktion(n-12) ;
    n_zwei = funktion((n-5)*1/2) ;

    ?

    wenn n = 0 dann fährt zum Zeitpunkt Z ein Bus.

    vllt brauch ich nur einen kleinen Schubs !?

    Schonmal vielen Dank für eure Hilfe !
  • Das mit dem Abstand berechnen, ist zwar gut gedacht aber du musst erst die Uhrzeit in Minuten berechnen und dann die Differenz bilden: Uhrzeit X=1315, dann ist X_in_minuten= ( (X / 100)* 60 ) + ( X % 100). Für Y dasselbe. Dann bildest du die Differenz der beiden Minutenzahlen, wenn diese 0 oder ein Vielfaches von 12 ist fährt ein Bus (es fährt dann ja einer nach 12, nach 24 nach 36.... Minuten). Das geht ja noch easy ohne Rekursion. Wenn das nicht der Fall ist musst du gucken ob die Reihe 2n+5 die neue Uhrzeit bilden kann. Dass kann man rekursiv machen muss es aber nicht. Es ist weiterhin nützlich mit X_in_minuten zu arbeiten. Du musst das rekursiv immer mal 2 plus fünf nehmen, bis du entweder die 0:0 Uhr-Grenze erreicht hast (Abbruchkriterium) oder das die Uhrzeit gleich Y_in_minuten ist.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Ich glaube, dass das rekursiv gelöst werden soll, weil die beiden "Reihen" vermischt werden können. D.h. dass ein Bus auch nach 2 * (n + 12 ) + 5 Minuten kommen kann (und das noch deutlich mehr verschachtelt). Das kriegt man mit ner einfachen Formel nurnoch sehr schwer in den Griff und daher bietet sich ein rekursiver Ansatz an.
    Ich würde also eine Funktion schreiben, die von n abhängt und als abbruchkriterium n+X == Z und n >Y.
    Danach kann man mit dem n 2 weitere Zeitpunkte ermitteln an denen ein Bus hält und mit diesen dann rekursiv die Funktion aufrufen.