wo liegt der fehler??
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bedingung
beispiel
count
dezimal umwandlung
eingabe
fehler
fragen
globale variable
meisten
parameter
rangliste
rekursion
schleifen
schlu
show
test
umwandlung
variable
verfahren
vielen dank
-
hiho..
hab folgendes prob... habe ma aus langer weile n script mit rekursion gemacht. das ziel ist es, die zuvor eingegebene zahl so lange zu "behandeln" bis am ende 1 raus kommt. das prinzip:
ist die zahl durch 2 teilbar wird die zahl durch zwei geteilt
ist die zahl nicht durch 2 teilbar wird sie mit 3 multipliziert und 1 addiert
BSP:
eingabe: 6
6 (/2) -> 3 (*3+1) -> 16 (/2) -> 8 (/2) -> 4 (/2) -> 2 (/2) -> 2 (/2) -> 1 -> ENDE
nun hab ich das problem das er bei manchen zahlen dann einfach weiter macht.
z.b. bei der 6.
anschauen k?nnt ihr das ganze hier:
http://ranglisten.xardas.lima-city.de/lima.php
der Code:
echo "<form action=$PHP_SELF?action=show method=post>"; echo "<table border=0 width=25%> <td align=center>Zahl: </td><td><input name=zahl></td></tr> <td><input type=Submit name=Submit value=Weiter></td></table></form>"; // ENDE ?USERE TABELLE if($action=="show"){ #static $count = 3; function test($value) { global $v; echo "<b><font size=4>".$value."</font></b>"; if($value==1)echo "Hier m?sste bereits Schluss sein!<br><br>"; if (($value %2 == 0) && ($value !=1) && ($value!="")) { $value = $value/2; echo " <font color=red><b> /2 </font></b>"; $v++; test ($value); } if (($value %2 != 0) && ($value !=1) && ($value!="")) { $value = $value*3+1; echo " <font color=blue><b> *3+1 </font></b>"; $v++; test ($value); } } test($_POST["zahl"]); echo "<p>Es waren $v Schritte! "; }
die frage: warum h?rt er dann (zb. bei der 6) nicht auf wenn er schon bei 1 ist....
vielen dank im voraus...
mfg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo
ranglisten schrieb:
function test($value) { global $v; echo '<b><font size=4>'.$value.'</font></b>'; if($value==1)echo 'Hier m?sste bereits Schluss sein!<br><br>'; if (($value %2 == 0) && ($value !=1) && ($value!='')) { $value = $value/2; echo ' <font color=red><b> /2 </font></b>'; $v++; test ($value); } if (($value %2 != 0) && ($value !=1) && ($value!='')) { $value = $value*3+1; echo ' <font color=blue><b> *3+1 </font></b>'; $v++; test ($value); } }
Beispiel 10:
Gehe in die erste schleife.
10/ 2= 5
Rekursion ... bis 1 gefunden
Dann kommt man irgendwann aus der Rekusion raus.
Hat aber noch immer $value=5
Somit sucht er bei 5 weiter und geht in die andere if-Bedingung.
Jens -
wieso hat er da noch $value=5? nachdem er geschaut hat, setzt er doch das value neu, also entweder /2 oder *3+1, und dann hat er doch schon value=1, oder versteh ich da irgendwas komplett falsch?
und, wenn er bereits bei value=1 war, wieso soll er dann aufeinmal value=5 haben, das versteh ich nich...
mfg -
Wie meistens bin ich zu faul, den Qu?lcode zu testen oder zu analysieren, daher die Frage:
Was willst du mit dem Script erreichen? Sieht nach einer Dezimal-nach-Bin?r-Umwandlung aus. IMHO gibt es da Funktionen in PHP (z.B. $binaer=sprintf("%b", $dezimal).
Man kann das Verfahren ohne Rekursion besser "kodieren". Schneller d?rfte es auch sein. Und dann k?nntest du dir die globale Variable sparen (die braucht man bei der Rekursion aber auch nicht: Einfach verschachteltes Array erstellen oder die Variable mit als Parameter ?bergeben).
MfG
alopex -
erreichen nicht viel, nur mal die rekursion anwenden, ob ich noch weis wies geht...
und da bei diesem code mein wissen wahrscheinlich am rande ist, da ich ja nicht weis warum er nicht aufh?rt, wollte ich hier nachfragen...
mit bin?r-dezimal umwandlung hat das nix zu tun...
trotzdem w?rde ich gern wissen, wo mein fehler liegt...
mfg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage