hi !
ich schreibe am donnerstag java klausur und bin grad ein wenig am üben und bekomme eine rekursionsaufgabe nicht raus : (zusammengefasst)
In Muenzland gibt es eine Währung die aus folgenden Münzen besteht: 7, 31 und 53 cent. mit diesen münzen ist jedoch nicht jeder beliebige betrag darstellbar, wie z.b. 61 cents;
schreiben sie eine java methode die für einen beliebigen betrag rekursiv ermittelt ob sich dieser durch diese drei münzen darstellen lässt.
kann mir wer helfen ?
danke
mfg hategrown
www.raiseyourvoice.de
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Ich würde eine Fkt mit einem Parameter für den Betrag die als zurückgibt ob selbiger aus den 3 Münzen darstellbar ist (das kommt jetzt sicher nicht überraschend). Diese Fkt kann sich dann (baumförmig) rekursiv selbst mit dem um die verschiedenen Münzwerte verringerten Betrag aufrufen, so lange bis der Betrag
Als erster Hinweis sollte das eigentlich reichen, würde ich das als Code schreiben hättest Du selbst nichts mehr zum Denken ;-)
Falls nicht, frag noch mal nach...
Gruß
Borlander
thx
hab zwar noch ewich rumgegrübelt aber habs noch hinbekommen danke
auf borlander is halt verlass, was kannst du noch alles für sprachen ?
hast mir ja mit assembler auch schon sehr weiterhelfen können
mfg
hategrown
Richtig ohne iterative anteile? Dann zeig mal her, ich konnte auf die schnelle nur auf eine rekursiv/iterative mischvariante kommen. Würde gerne sehen, ob eine andere lösung "ohne" iteration möglich ist.
Man lernt ja nie aus! :)
mr.escape
Zwar nicht in Java (hatte das JDK gerade nicht installiert, bin aber sowieso kein so großer Java-Fan...), aber am Algorithmus das allerdings nichts ändern:
if($betrag return false;
elseif($betrag==0)
return true;
else
return muenzland($betrag-7) || muenzland($betrag-31) || muenzland($betrag-53);
}
Gruß
Borlander
Hab eben noch mal nebenbei eine iterative Lösung geschrieben:
function muenzland_iter($betrag) {
for($b1 = $betrag; $b1>=0; $b1 -=7) {
for($b2 = $b1; $b2>=0; $b2 -=31) {
for($b3 = $b2; $b3>=0; $b3 -=53) {
if($b3==0) {
return true;
}
}
}
}
return false;
}
Jetzt würde mich allerdings auch noch mal die gemischte Form interssieren ;-)
Ok, einmal gemischtes:
function RecMuenze($betrag, $muenzind){
$muenze=$muenzval[$muenzind];
if(($betrag % $muenze)==0)
return true;//passt
if($muenzind return false;//keine weitere münzgröße mehr
$n=(int)($betrag/$muenze);
for($i=$n; $i>=0; $i--)
if(RecMuenze($betrag-$i*$muenze, $muenzind-1))
return true;
return false;
}
function muenzland($betrag) {
return RecMuenze($betrag, sizeof($muenzval)-1);
}
mr.escape