kostenloser Webspace werbefrei: lima-city


wo liegt der fehler??

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ranglisten

    Kostenloser Webspace von ranglisten

    ranglisten hat kostenlosen Webspace.

    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>&nbsp;/2&nbsp;</font></b>";
    		$v++;
    		test ($value);
    		
    	}
    	if (($value %2 != 0) && ($value !=1) && ($value!="")) {
    		$value = $value*3+1;
    		echo " <font color=blue><b>&nbsp;*3+1&nbsp;</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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    ranglisten

    Kostenloser Webspace von ranglisten

    ranglisten hat kostenlosen Webspace.

    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
  5. 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
  6. Autor dieses Themas

    ranglisten

    Kostenloser Webspace von ranglisten

    ranglisten hat kostenlosen Webspace.

    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
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!