Anmerkung: Rekusion ist um einiges langsamer als Iteration!
[autoit]
$n = 25
$bench_start = TimerInit()
ConsoleWrite(Fibonacci_i($n) & @CRLF)
$bench_end_i = Round(TimerDiff($bench_start), 4)
$bench_start = TimerInit()
ConsoleWrite(Fibonacci_r($n) & @CRLF)
$bench_end_r = Round(TimerDiff($bench_start), 4)
ConsoleWrite(@CRLF & "Iterative: " & $bench_end_i & " ms" & @CRLF & "Recursive: " & $bench_end_r & " ms" & @CRLF & "Diff: " & Abs($bench_end_i - $bench_end_r) & " ms !" & @CRLF & @CRLF)
[/autoit][autoit][/autoit][autoit]Func Fibonacci_i($f)
Dim $arr_fib[3]
$arr_fib[0] = 0
$arr_fib[1] = 1
For $i = 2 To $f
$arr_fib[2] = $arr_fib[1] + $arr_fib[0]
$arr_fib[0] = $arr_fib[1]
$arr_fib[1] = $arr_fib[2]
Next
Return $arr_fib[2]
EndFunc
Func Fibonacci_r($f)
If $f = 0 Then Return 0
If $f = 1 Then Return 1
Return Fibonacci_r($f - 1) + Fibonacci_r($f - 2)
EndFunc
Woran das hängt kann ich nicht sagen! Habe mal dazu ein Thread im engl. Forum erstellt, aber die Dev. haben nichts konkretes sagen können! Für Rekursion ist AutoIt wohl eher nicht geeignet!
Also nach Möglichkeit Rekursion vermeiden!
Ob das auch so in anderen Sprachen, wie z.B. C/C++ ist?
Gruß,
UEZ