brainfuck, 61 bytes
Prints numbers as char codes indefinitely. For clarity, here's a version that prints in numbers (except for the first two elements, which are easy enough to verify).
How It Works:
+.+. Prints the first two elements. These are the self-referential elements This also intitialises the tape with the third element, 2 [ Start infinite loop . Print current lowest element [>]>+++>+++ Move to end of tape and create two 3s <<<[->+>->-<<<] Subtract the last element of the tape from these 3s <[[->+<]<]>> Move to the beginning of the tape -- Subtract two from the first element This leaves 2 as 0 and 1 as -1 [ If the number was 1 [>]<, Delete the excess element from the end of the tape <[<]>+ Remove the -1 ] > Move to the next element of the list ]