Shortest Addition Chain
Haskell, 57 bytes



c=[1]:[x++[a+b]|x&lt;-c,a&lt;-x,b&lt;-x]
f n=[x|x&lt;-c,last x==n]!!0


A brute force solution.
Try it online!

Explanation

The infinite list c contains all addition chains, ordered by length.
It is defined inductively in terms of itself, by taking a list x from c and two elements from x, and appending their sum to x.
The function f finds the first list in c that ends with the desired number.

c=            -- c is the list of lists
 [1]:         -- containing [1] and
 [x           -- each list x
  ++[a+b]     -- extended with a+b
 |x&lt;-c,       -- where x is drawn from c,
  a&lt;-x,       -- a is drawn from x and
  b&lt;-x]       -- b is drawn from x.
f n=          -- f on input n is:
 [x           -- take list of those lists x
 |x&lt;-c,       -- where x is drawn from c and
  last x==n]  -- x ends with n,
 !!0          -- return its first element.