Solution (source code)

= Solution

Print a prefix while following the <linked list>, counting how many closing parentheses remain. The final reciprocal can be printed without parentheses.
``
PROCEDURE printCF(f: fraction);
VAR p: fraction; opened: INTEGER;
BEGIN
  p := f; opened := 0;
  Out.Int(p.head, 0);
  p := p.tail;
  WHILE p # NIL DO
    IF p.tail = NIL THEN
      Out.String("+1/"); Out.Int(p.head, 0)
    ELSE
      Out.String("+1/("); Out.Int(p.head, 0);
      opened := opened + 1
    END;
    p := p.tail
  END;
  WHILE opened > 0 DO
    Out.String(")"); opened := opened - 1
  END
END printCF;
``
The first <loop invariant> says that `p` is the next unprinted <linked list node>, the printed text is the correct expression prefix, and `opened` counts its unmatched opening parentheses. The final node contributes no opening parenthesis; the second <loop invariant> says that precisely `opened` closing parentheses remain. Thus `[1,2,3,4,5]` produces \b[`1+1/(2+1/(3+1/(4+1/5)))`]. A singleton prints just its head. If the first head is negative, its leading minus remains a valid prefix; subsequent heads are positive.

The precondition is a finite nonempty <continued fraction> list. Every dereference is made only for a nonnull pointer. The procedure uses $O(1)$ auxiliary space and time linear in the number of nodes, apart from printing their digits. The source's claimed strict upper bound $x_0+1$ has an exception under its stated definition: `[x0,1]` represents $x_0+1$. None of these algorithms relies on that incorrect strict bound.