OFFSET
1,3
COMMENTS
The drib tree is an infinite binary tree labeled with rational numbers. It is generated by the following iterative process: start with the rational 1; for the left subtree increment and then reciprocalize the current rational; for the right subtree interchange the order of the two steps: the rational is first reciprocalized and then incremented. Like the Stern-Brocot and the Bird tree, the drib tree enumerates all the positive rationals (A162911(n)/A162912(n)).
From Yosu Yurramendi, Jul 11 2014: (Start)
If the terms (n>0) are written as an array (left-aligned fashion) with rows of length 2^m, m = 0,1,2,3,...
1,
1, 2,
2, 3,1, 3,
3, 5,1, 4, 3, 4,2, 5,
5, 8,2, 7, 4, 5,3, 7,4, 7,1, 5, 5, 7,3, 8,
...
then the sum of the m-th row is 3^m (m = 0,1,2,), each column k is a Fibonacci-type sequence.
If the rows are written in a right-aligned fashion:
1
1, 2
2, 3,1, 3
3, 5,1, 4, 3, 4,2, 5
5, 8,2, 7,4, 5,3, 7, 4, 7,1, 5, 5, 7,3, 8
...
then each column k also is a Fibonacci-type sequence.
If the sequence is considered by blocks of length 2^m, m = 0,1,2,..., the blocks of this sequence are the reverses of blocks of A162912 (a(2^m+k) = A162912(2^(m+1)-1-k), m = 0,1,2,..., k = 0..2^m-1).
(End)
From Yosu Yurramendi, Jan 12 2017: (Start)
a(2^(m+1) -1) = A000045(m+2), m>=0. (End)
LINKS
Ralf Hinze, Functional pearls: the bird tree, J. Funct. Programming 19 (2009), no. 5, 491-508.
FORMULA
a(n) where a(1) = 1; a(2n) = b(n); a(2n+1) = a(n) + b(n); and b(1) = 1; b(2n) = a(n) + b(n); b(2n+1) = a(n).
a(2^(m+1)+2*k) = a(2^(m+1)-k-1), a(2^(m+1)+2*k+1) = a(2^(m+1)-k-1) + a(2^m+k), a(1) = 1, m>=0, k=0..2^m-1. - Yosu Yurramendi, Jul 11 2014
a(2^(m+1) + 2*k) = A162912(2^m + k), m >= 0, 0 <= k < 2^m.
a(2^(m+1) + 2*k + 1) = a(2^m + k) + A162912(2^m + k), m >= 0, 0 <= k < 2^m. - Yosu Yurramendi, Mar 30 2016
EXAMPLE
The first four levels of the drib tree:
[1/1],
[1/2, 2/1],
[2/3, 3/1, 1/3, 3/2],
[3/5, 5/2, 1/4, 4/3, 3/4, 4/1, 2/5, 5/3].
PROG
(Haskell) import Ratio; drib :: [Rational]; drib = 1 : map (recip . succ) drib \/ map (succ . recip) drib; (a : as) \/ bs = a : (bs \/ as); a162911 = map numerator drib; a162912 = map denominator drib
(R) blocklevel <- 6 # arbitrary
a <- 1
for(m in 0:blocklevel) for(k in 0:(2^m-1)){
a[2^(m+1)+2*k ] <- a[2^(m+1)-1-k]
a[2^(m+1)+2*k+1] <- a[2^(m+1)-1-k] + a[2^m+k]
}
a
# Yosu Yurramendi, Jul 11 2014
(PARI) a(n) = my(x = 0, y = 1); forstep(i = logint(n, 2), 0, -1, [x, y] = if(bittest(n, i), [y, x + y], [x + y, x])); y \\ Mikhail Kurkov, Oct 12 2023
CROSSREFS
KEYWORD
easy,frac,nonn
AUTHOR
Ralf Hinze (ralf.hinze(AT)comlab.ox.ac.uk), Aug 05 2009
STATUS
approved