In Forth sieht die iterative Version so aus:
Code: Alles auswählen
\ ( n -- f ) berechnet die nte fibonacci-zahl
: fib
0 1 rot 0 do over + swap loop drop ;
\ benchmark über n fibonacci-zahlen
: fibo-bench
1+ 1 do
i ." fibo(" . ." ) = "
i cnt COG@ swap fib cnt COG@ swap .
swap - ." , ticks : " .
cr
loop ;
Und das Ergebnis:
Code: Alles auswählen
Prop0 Cog2 ok
decimal 40 fibo-bench hex
fibo(1 ) = 1 , ticks : 2416
fibo(2 ) = 1 , ticks : 3232
fibo(3 ) = 2 , ticks : 4048
fibo(4 ) = 3 , ticks : 4864
fibo(5 ) = 5 , ticks : 5680
fibo(6 ) = 8 , ticks : 6496
fibo(7 ) = 13 , ticks : 7312
fibo(8 ) = 21 , ticks : 8128
fibo(9 ) = 34 , ticks : 8944
fibo(10 ) = 55 , ticks : 9760
fibo(11 ) = 89 , ticks : 10576
fibo(12 ) = 144 , ticks : 11392
fibo(13 ) = 233 , ticks : 12208
fibo(14 ) = 377 , ticks : 13024
fibo(15 ) = 610 , ticks : 13840
fibo(16 ) = 987 , ticks : 14656
fibo(17 ) = 1597 , ticks : 15472
fibo(18 ) = 2584 , ticks : 16288
fibo(19 ) = 4181 , ticks : 17104
fibo(20 ) = 6765 , ticks : 17920
fibo(21 ) = 10946 , ticks : 18736
fibo(22 ) = 17711 , ticks : 19552
fibo(23 ) = 28657 , ticks : 20368
fibo(24 ) = 46368 , ticks : 21184
fibo(25 ) = 75025 , ticks : 22000
fibo(26 ) = 121393 , ticks : 22816
fibo(27 ) = 196418 , ticks : 23632
fibo(28 ) = 317811 , ticks : 24448
fibo(29 ) = 514229 , ticks : 25264
fibo(30 ) = 832040 , ticks : 26080
fibo(31 ) = 1346269 , ticks : 26896
fibo(32 ) = 2178309 , ticks : 27712
fibo(33 ) = 3524578 , ticks : 28528
fibo(34 ) = 5702887 , ticks : 29344
fibo(35 ) = 9227465 , ticks : 30160
fibo(36 ) = 14930352 , ticks : 30976
fibo(37 ) = 24157817 , ticks : 31792
fibo(38 ) = 39088169 , ticks : 32608
fibo(39 ) = 63245986 , ticks : 33424
fibo(40 ) = 102334155 , ticks : 34240
Prop0 Cog2 ok