Golden strings are analogous to Fibonacci numbers, except one uses concatenation rather than addition.

Start with *s*_{1} = “1” and *s*_{2} = “10”. Then define *s*_{n} = *s*_{n-1} + *s*_{n-2} where “+” means string concatenation.

The first few golden strings are

- “1”
- “10”
- “101”
- “10110”
- “10110101”
- …

The length of *s*_{n} is *F*_{n+1}, the *n*+1st Fibonacci number. Also, *s*_{n} contains *F*_{n} 1’s and *F*_{n-1} 0’s. (Source: The Glorious Golden Ratio).

If we interpret the *s*_{n} as the fractional part of a binary number, the sequence converges to the rabbit constant *R* = 0.7098034428612913…

It turns out that *R* is related to the golden ratio φ by

where ⌊*i* φ⌋ is the largest integer no greater than *i*φ.

Here’s a little Python code to print out the first few golden strings and an approximation to the rabbit constant.

from mpmath import mp, fraction a = "1" b = "10" for i in range(10): b, a = b+a, b print(b) n = len(b) mp.dps = n denom = 2**n num = int(b, 2) rabbit = fraction(num, denom) print(rabbit)

Note that the code sets the number of decimal places, `mp.dps`

, to the length of the string `b`

. That’s because it takes up to *n* decimal places to exactly represent a rational number with denominator 2^{n}.

**Related posts**:

The rabbit constant calculation in the J language:

0.5#.|.0,;(;;{.)^:(6) 1;0

0.709803

written by Raul Miller @ forums.jsoftware.com

In Haskell:

gold = “1”:”10″:zipWith (++) (tail gold) gold

The latest version of sympy no longer ships with mpmath. You should change the code to just use “from mpmath import …”.

Thanks, Aaron. I updated the post as you suggested.