Return gibt 0 statt 1 zurück

  • Hi,

    ich habe folgende Funktion geschrieben:

    [autoit]

    Func test($a, $b)
    If $b == 0 Then
    Return $a
    Else
    test($b, Mod($a, $b))
    EndIf
    EndFunc

    [/autoit]


    Wenn ich diese Funktion nun so aufrufe

    [autoit]

    test(37, 16)

    [/autoit]

    kommt also Ergebniss 0 herraus.

    Wenn man in der Funktion nun eine Msgbox so einbaut sieht man allerdings das die Variable $a die mit Return zurückgegeben wird die Zahl 1 hat.

    [autoit]

    Func test($a, $b)
    If $b == 0 Then
    MsgBox(0,"",$a)
    Return $a
    Else
    test($b, Mod($a, $b))
    EndIf
    EndFunc

    [/autoit]

    Kann mir jemand sagen wo hier nun der Fehler ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (5. August 2010 um 00:01)

  • Du hast im Else-Zweig return vergessen. Außerdem solltest du If $b = 0 Then schreiben, da du ja Zahlen und keine Strings vergleichen willst.

    [autoit]

    Func test($a, $b)
    If $b = 0 Then
    Return $a
    Else
    Return test($b, Mod($a, $b))
    EndIf
    EndFunc

    [/autoit]


    Das lässt sich außerdem kürzen:

    [autoit]

    Func test($a, $b)
    If $b = 0 Then Return $a
    Return test($b, Mod($a, $b))
    EndFunc

    [/autoit]


    Als Schleife könnte man es so schreiben:

    [autoit]

    Func test($a, $b)
    Local $c
    While Not ($b = 0)
    $c = $a
    $a = $b
    $b = Mod($c, $b)
    WEnd
    Return $a
    EndFunc

    [/autoit]