1# Simple recursive fibonacci implementation, roughly equivalent to:
2#
3#  int fibonacci (int arg)
4#  {
5#     if (arg < 2)
6#       return arg
7#     return fibonacci (arg-1) + fibonacci (arg-2)
8#  }
9
10# Initial state:
11# stack: [arg]
12
13# 0:
14DUP
15# stack: [arg, arg]
16
17# 1:
18PUSH_CONST 2
19# stack: [arg, arg, 2]
20
21# 2:
22BINARY_COMPARE_LT
23# stack: [arg, (arg < 2)]
24
25# 3:
26JUMP_ABS_IF_TRUE 13
27# stack: [arg]
28
29# 4:
30DUP
31# stack: [arg, arg]
32
33# 5:
34PUSH_CONST  1
35# stack: [arg, arg, 1]
36
37# 6:
38BINARY_SUBTRACT
39# stack: [arg,  (arg - 1)
40
41# 7:
42RECURSE
43# stack: [arg, fib(arg - 1)]
44
45# 8:
46ROT
47# stack: [fib(arg - 1), arg]
48
49# 9:
50PUSH_CONST  2
51# stack: [fib(arg - 1), arg, 2]
52
53# 10:
54BINARY_SUBTRACT
55# stack: [fib(arg - 1), arg,  (arg - 2)
56
57# 11:
58RECURSE
59# stack: [fib(arg - 1), fib(arg - 1)]
60
61# 12:
62BINARY_ADD
63# stack: [fib(arg - 1) + fib(arg - 1)]
64
65# 13:
66RETURN
67