\ Fibonacci-Zahlen
\ Swift-Forth
\ Wolfgang.Urban@schule.at
\ Algorithmus 1
: fibo1 ( n -- fibo_n )
dup \ n -- n n
2 <= if \ n <= 2 ?
drop \ n --
1 \ 1 ist Ergebnis
else
dup 1 - \ n -- n n-1
recurse \ n f_n-1
swap 2 - \ n f_n-1 -- f_n-1 n -- f_n-1 n-2
recurse \ f_n-1 f_n-2
+ \ f_n
then
;
\ Algorithmus 1a im
\ kompakten Forth Schreibstil. Details siehe oben.
: fibo1a ( n -- fibo_n )
dup 2 <= if drop 1 exit then
dup 1 - recurse swap 2 - recurse +
;
\ Algorithmus 3
: fibo3 ( n -- fibo_n )
dup
2 <= if \ wenn n<=2
drop 1 exit
then
1 1 \ erste 2 Werte
rot \ n raufholen
2 - \ n-2 Iterationen
0 \ Ende mit 0
?do \ Schleifenstart
dup rot \ a b -- a b b -- b a b
+ \ b a+b
loop \ Schleifenende
nip \ a b -- b
;
\ Algorithmus 4
\ mit aufrufendem Wort 'fibo'
: fibo4 ( a b n -- lucas_n )
dup \ -- a b n n
1 = if \ -- a b n
drop drop \ -- a
exit
then
dup \ -- a b n n
2 = if \ -- a b n
drop nip \ -- b
exit
then
rot \ b n a
rot \ n a b
dup \ n a b b
rot \ n b b a
+ \ n b a+b
rot \ b a+b n
1 - \ b a+b n-1
recurse
;
: fibo ( n -- fibo_n ) 1 1 rot fibo4 ;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\ Aufruf: z.B. 1 1 10 fibo4 .
\ oder 10 fibo .