2022-03-25 13:29:45 -04:00
|
|
|
( Fibonacci:
|
2023-06-06 14:49:28 -04:00
|
|
|
A series of numbers where the next number
|
2022-03-25 13:29:45 -04:00
|
|
|
is made of the two numbers before it )
|
2022-02-23 18:23:38 -05:00
|
|
|
|
2023-06-06 17:33:20 -04:00
|
|
|
|0100 @on-reset
|
2022-02-23 18:23:38 -05:00
|
|
|
|
2023-06-02 00:53:28 -04:00
|
|
|
#0019 #0000
|
|
|
|
&l
|
|
|
|
DUP2 pdec #2018 DEO
|
2023-06-06 14:49:28 -04:00
|
|
|
DUP2 fib pdec #2018 DEO
|
|
|
|
DUP2 #0000 #0001 ROT2 fibr pdec #0a18 DEO POP2 POP2
|
2023-06-02 00:53:28 -04:00
|
|
|
INC2 GTH2k ?&l
|
|
|
|
POP2 POP2
|
2023-06-06 17:33:20 -04:00
|
|
|
#800f DEO
|
2022-02-23 18:23:38 -05:00
|
|
|
|
|
|
|
BRK
|
|
|
|
|
2023-06-06 14:49:28 -04:00
|
|
|
( recursive )
|
|
|
|
|
2023-06-06 17:33:20 -04:00
|
|
|
@fib ( num* -- numfib* )
|
2023-06-02 00:53:28 -04:00
|
|
|
#0001 GTH2k ?&ok
|
|
|
|
POP2 JMP2r &ok
|
|
|
|
SUB2k fib STH2 INC2
|
|
|
|
SUB2 fib STH2r
|
|
|
|
ADD2
|
|
|
|
JMP2r
|
|
|
|
|
2023-06-06 14:49:28 -04:00
|
|
|
( tail-recursive )
|
|
|
|
|
2023-06-06 17:33:20 -04:00
|
|
|
@fibr ( a* b* num* -- a* b* numfib* )
|
2023-06-06 14:49:28 -04:00
|
|
|
ORAk ?&no-0
|
|
|
|
POP2 OVR2 JMP2r &no-0
|
|
|
|
DUP2 #0001 NEQ2 ?&no-1
|
|
|
|
POP2 DUP2 JMP2r &no-1
|
|
|
|
#0001 SUB2 STH2
|
|
|
|
SWP2 ADD2k NIP2 STH2r
|
|
|
|
!fibr
|
|
|
|
|
|
|
|
( print routine )
|
|
|
|
|
2023-06-02 00:53:28 -04:00
|
|
|
@pdec ( short* -- )
|
2022-02-23 18:23:38 -05:00
|
|
|
|
2023-06-02 00:53:28 -04:00
|
|
|
#2710 LIT2r 00fb
|
|
|
|
&w
|
|
|
|
DIV2k #000a DIV2k MUL2 SUB2 SWPr
|
|
|
|
EQUk OVR STHkr EQU AND ?&skip
|
|
|
|
DUP LIT "0 ADD #19 DEO INCr
|
|
|
|
&skip
|
|
|
|
POP2 #000a DIV2
|
|
|
|
SWPr INCr STHkr ?&w
|
|
|
|
POP2r POP2 POP2
|
2022-02-23 18:23:38 -05:00
|
|
|
|
|
|
|
JMP2r
|
2023-06-02 00:53:28 -04:00
|
|
|
|