| Programming with Ophis | ||
|---|---|---|
| <<< Previous | Call Stacks | Next >>> | 
About the simplest "interesting" recursive function is the Fibonacci numbers. The function fib(x) is defined as being 1 if x is 0 or 1, and being fib(x-2)+fib(x-1) otherwise.
Actually expressing it like that directly produces a very inefficient implementation, but it's a simple demonstration of the system. Here's code for expressing the fib function:
.scope
; Uint16 fib (Uint8 x): compute Xth fibonnaci number.
; fib(0) = fib(1) = 1.
; Stack usage: 3.
fib:    lda     #$03
        jsr     save'stack
        lda     fun'vars
        cmp     #$02
        bcc     _base
        dec     fun'args
        jsr     fib
        lda     fun'args
        sta     fun'vars+1
        lda     fun'args+1
        sta     fun'vars+2
        lda     fun'vars
        sec
        sbc     #$02
        sta     fun'args
        jsr     fib
        clc
        lda     fun'args
        adc     fun'vars+1
        sta     fun'args
        lda     fun'args+1
        adc     fun'vars+2
        sta     fun'args+1
        jmp     _done
_base:  ldy     #$01
        sty     fun'args
        dey
        sty     fun'args+1
_done:  lda     #$03
        jsr     restore'stack
        rts
.scend | 
The full application, which deals with interfacing with CBM BASIC and handles console I/O and such, is in fibonacci.oph.
| <<< Previous | Home | Next >>> | 
| Our Goals | Up | Example Programs |